![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переключение между Direct3D и OpenGL [Delphi, 3D]
Ricks © (2005-11-30 00:42:00)Каким образом делают так, чтобы программы (игры) выводились как при помощи Direct3D, так и при помощи OpenGL?
Например WarCraft III - там ведь можно выбрать, что использовать...
"war3.exe -opengl"всего лишь!
П7 (2005-11-30 15:10:00) [1]
> Sphinx © (30.11.05 14:28) [6]
Ну да, ну да, ты прав... (:
Sphinx (2005-11-30 14:28:00) [2]Там в моем посте жуткая ошибка (точнее опечатка), которую ни кто и не заметил :)
исправленному верить =0
TD3DRender = class (TRender)
...
TOGLRender = class (TRender)
...
Кефир87 (2005-11-30 13:16:00) [3]http://citkit.dl.sourceforge.net/sourceforge/quake2delphi/DelphiQuake2Source_20.04.2004.zip
П7 (2005-11-30 11:52:00) [4]
> То есть, приходиться писать отрисовку как для D3D, так и
> для OpenGL?
Да, иначе всё было бы слишком просто.
> Каждую деталь сцены нужно будет писать 2 раза и по разному?
При грамотной организации сцены писать приходится не так уж и много. Делается некий фреймворк, в котором наличествуют все необходимые тебе функции. Реализация этих функций производится несколько раз. Например 2 - для DX и OGL. А дальше ты работваешь уже только с этим фреймворком, не затрагивая функций одного из АПИ.
Такой же подход применяется для кроспрлатформенных движков.
> PS: Исходников у меня нет...
Интернет же есть - скачай!
Ricks (2005-11-30 11:14:00) [5]То есть, приходиться писать отрисовку как для D3D, так и для OpenGL?
Каждую деталь сцены нужно будет писать 2 раза и по разному?
PS: Исходников у меня нет...
_3d[Power] (2005-11-30 09:38:00) [6]Посмотри исходники quake2, там это очень наглядно (software \ opengl)
Sphinx (2005-11-30 07:47:00) [7]что-то типа этого:
TRender = class
...
function Render: Integer; virtual;
...
end;
TD3DRender = class
...
function Render: Integer; override;
...
end;
TOGLRender = class
...
function Render: Integer; override;
...
end;
...
var
Render : TRender;
...
if Run = RunOGL then
Render := TOGLRender.Create;
else
Render := TD3DRender.Create;
...
Render.Render;