ПрограммированиеФорумГрафика

Вопрос по IDirect3DDevice9

#0
6:36, 19 сен 2009

Пишу (пытаюсь) графический движок. И у меня так выходит, что все классы ориентированны на использование одного единственного устройства IDирект3DDевайс9.
А есть ли вообще такие случаи, когда в одном приложении их должно быть несколько?

#1
9:16, 19 сен 2009

лично я такие не встречал...

#2
9:18, 19 сен 2009

И еще вопрос: в моем коде цикла рендеринга, и от луны, и от SDK, timeDelta (интервал м-жду кадрами) иногда был меньше нуля! Причем если минус просто выкинуть, то все нормально, а если нет - анимация рывками.
Кто знает, от чего так.

#3
10:52, 19 сен 2009

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

#4
13:52, 19 сен 2009

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

lexer
Для рендера в разные окна (например, несколько окон у 3д-редактора) много девайсов иметь не нужно - в параметрах Present можно просто указывать нужное окно.

#5
15:15, 19 сен 2009

BUzer
Прибой94
> и от луны, и от SDK,
Я цикл не трогал!

И если бы я чето неправильно замерял, анимация должна быть с глюками, а у меня при игнорировании знака анимация гладкая.

#6
15:24, 19 сен 2009

BUzer
Я знаю, но ведь так можно делать. К тому же разным девайсам наверняка можно указать ещё и разные опции.

#7
16:45, 19 сен 2009

Прибой94
> Я цикл не трогал!
Ну значит появился повод потрогать :)

#8
1:04, 20 сен 2009

Прибой94
Лучше наверное использовать несколько указателей на один девайс.

#9
7:12, 20 сен 2009

graveman
Ну я так и делаю, кидаю в каждый граф-класс по указателю на девайс, и уже работаю с устройством как с членом класса.

BUzer
Мне пока достаточно игнориориовать знак

#10
9:59, 20 сен 2009

timeDelta через QPC?
Процессор многоядерный?
Профит?

#11
12:43, 20 сен 2009

Что такое QPC? Профит? Процессор одноядерный.

Суть вот в чем: Алгоритм вычисления тимеДельты - разница между текущим timeGetTime() и предыдущим.
В примерах луны все работает. Начинаю править (не меняя вычисления дельты), через некоторое время как-то переменно выскакивает отрицательный дельта.

#12
13:23, 20 сен 2009

Попробуй GetTickCount() значение часов минут и секунд вобщем-то не нужно для интервалов, а разница между двумя GetTickCount() в миллисекундах очень полезная.

#13
14:19, 20 сен 2009

тимеГетТиме() дает время в упакованном формате?!

#14
21:51, 20 сен 2009

Фрагмент из книги "Физика для разработчиков игр":
"Если вы хотите использовать вторую видеокарту (это делают немногие игры), вам понадобится второе устройство."

Видимо, кто-то всё-таки использует два девайса. И две видюхи. :)) Кстати, мне в своё время надоело передавать указатель на IDirect3DDevice9 в классы и поэтому я сделал его внешним. То есть extern и вне классов. А вообще, грамотнее всего (наверное), сделать в основном классе, где создаётся это устройство, какой-нибудь метод, типа:
IDirect3DDevice9 *GetD3DDevice()
{
  return this->pD3DDevice;
}
И обращаться к нему в том месте где нужно устройство. Что-то подобное, насколько я помню, сделано в Огре. :)

ПрограммированиеФорумГрафика

Тема в архиве.