ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX



         

Свет и тень - часть 8


94Д •^IStW' Гпап-а 1П Г^ват 1л тош!-

Не знаю, можно ли считать это практическим примером работы с цветным освещением, однако писать программу было довольно интересно. Смысл основной части этого приложения — переместить камеру, задать новое освещение и воспроизвести макет на экране. Давайте выделим несколько минут и посмотрим, как все это делается. Однако перед тем, как заниматься программой, взгляните на Рисунок 10-8, который поясняет принцип ее работы.

Рисунок. 10-8. Получение стереоизображения


Сначала макет освещается красным светом, а камера переносится в точку А, в которой воспроизводится изображение для левого глаза. Затем макет освещается зеленым светом, а камера переносится в точку В, где воспроизводится изображение для правого глаза. Если просматривать изображение с красным фильтром на левом глазу и зеленым — на правом, то левый глаз будет видеть изображение из точки А, а правый — из точки В. Ниже приведен фрагмент кода пассивного цикла приложения, в котором все это происходит:

BOOL CMainFrame::Update() {

m_bPhase = !m bPhase;

double d = 1.0; // Расхождение

double cz = 10; // Положение камеры по оси z

C3dVector vo;

if (m_pCur3hape) (

I iRRTHhIP UrrrrHJUUIUIA ГРОТЯ "ЧКЙ:-; 9А^

m_pCurShape-»GetPosition (vo) ;

} else {

vo = C3dVector(0, 0, 0) ;

} C3dVector cv;

if (m_pDirLight && m_p3cene) { if "(itiJaPhase) {

m_pDirLight-»SetColor (1, 0, 0) ;

cv = C3dVector(-d, 0, -cz') ;

} else {

m_pDirLight-»SetColor(0, 1, 0);

cv = C3dVector(d, 0, -cz);

} m_pScene-»SetCameraPosition (cv) ;

C3dVector vl = vo — cv;

m_pScene-»SetCameraDirection (vl) ;

}

// Обновить трехмерное окно if (m_wnd3d.Update(1)) { ЬМоге = TRUE;

}

return ЬМоге;

i

Вектор текущего положения объекта (vo) используется для вычисления вектора направления камеры (vl), чтобы векторы для левого и правого видов сходились в центре объекта.

Подобный подход к реализации стереоскопического изображения обладает тремя недостатками:

• Поскольку левый и правый виды выводятся по отдельности, изображение заметно мерцает.




Содержание  Назад  Вперед