Несколько камер в Direct3D
Сразу скажу, что я новичок, так что не судите строго. Я пытаюсь написать что-то вроде простого движка на DirectX 9. После того, как разобрался с выводом геометрии пришло время организовать работу с камерой (а вернее с камерами). А вопрос мой заключается в следующем:
Как отрендерить сцену с нескольких камер, при этом для каждой из них указать свой собственный порт просмотра в пределах одного окна. Другими словами получить что-то наподобие эффекта split-screen (разделенный экран) в автосимуляторах.
Я пытался сделать следующим образом:
1. Устанавливаю матрицу просмотра первой камеры;
2. Устанавливаю порт просмотра первой камеры;
3. Рердерю сцену (Clear->BeginScene->DrawSubset->EndScene->Present);
4. Устанавливаю матрицу просмотра второй камеры;
5. Устанавливаю порт просмотра второй камеры;
6. Рердерю сцену (аналогично шагу 3).
Всё это даёт нужный результат только в оконном режиме, тоесть тогда, когда включен СвапЭффект D3DSWAPEFFECT_DISCARD или D3DSWAPEFFECT_COPY. В полноэкранном режиме (D3DSWAPEFFECT_FLIP) наблюдается мельтишение, поскольку после рендеринга изображения с первой камеры происходит смена переднего и заднего буферов, после чего изображение со второй камеры рендерится в передний буфер.
Вопрос: как сделать так, чтобы переключение буферов происходило только после рендеринга изображения из последней камеры, а не при каждом вызове Present. (ИМХО, не включать же в полноэкранном режиме D3DSWAPEFFECT_COPY, хотя это помогает... Но, как мне кажется, это не правильно).
P.S.: Возможно, я вообще пошел по неверному пути. Очень прошу знающих подсказать!
P.P.S.: Для тех, кто знаком с Blitz3D или DarkBASIC - стремлюсь к схеме работы с камерами, реализованной в этих языках...
1. Устанавливаю матрицу просмотра первой камеры;
2. Устанавливаю порт просмотра первой камеры;
3. Рердерю сцену (Clear->BeginScene->DrawSubset->EndScene);
4. Устанавливаю матрицу просмотра второй камеры;
5. Устанавливаю порт просмотра второй камеры;
6. Рердерю сцену (аналогично шагу 3).
7. Present
P.S.: Я же говорил, что новичок!