Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6317
Последний выпуск: 19.06.2015

Несколько камер в Direct3D

6.7K
29 июля 2008 года
Kessler
42 / / 02.08.2005
Здравствуете, уважаемые коллеги!
Сразу скажу, что я новичок, так что не судите строго. Я пытаюсь написать что-то вроде простого движка на 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 - стремлюсь к схеме работы с камерами, реализованной в этих языках...
6.7K
29 июля 2008 года
Kessler
42 / / 02.08.2005
Прошу прощения за беспокойство! Всё получилось! Просто не нужно было вызывать метод Present после каждого рендеринга сцены каждой из камер... Тоесть:

1. Устанавливаю матрицу просмотра первой камеры;
2. Устанавливаю порт просмотра первой камеры;
3. Рердерю сцену (Clear->BeginScene->DrawSubset->EndScene);
4. Устанавливаю матрицу просмотра второй камеры;
5. Устанавливаю порт просмотра второй камеры;
6. Рердерю сцену (аналогично шагу 3).
7. Present

P.S.: Я же говорил, что новичок!

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог