![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как совмещать 3D & 2D [DirectX]
DevilDevil © (2006-05-27 20:57:00)Почти в каждой трёхмерной игрушке есть двухмерная менюшка. Один из вариантов, отрисовывать текстуры с условно говоря Z = 0. В OpenGL именно так и поступают, а в DX есть DirectDraw. Мой вопрос: возможно ли совмещать 2 этих режима?
MeF Dei Corvi (2006-05-29 16:21:00) [1]
> Это про D3D???
Нет, конечно! :)
Ты же уже писал, что в D3D это делается через D3DFVF_XYZRHW.
Cash (2006-05-29 15:57:00) [2]MeF Dei Corvi © (29.05.06 15:06) [4]:
Это про D3D???
MeF Dei Corvi (2006-05-29 15:06:00) [3]
> возможно ли совмещать 2 этих режима?
Можно, но кому это нужно?..
Если можно просто поставить ортографическую проекцию, нарисовать это самое меню и вернуть обратно перспективу, если это необходимо...
Cash (2006-05-29 08:36:00) [4]TButton © (27.05.06 21:46) [2]:
Симпатии твои понятны мне довольно. :)
> откуда знал...
Знал... не знал.... секрет фирмы! :)))
В ОГЛе это почти так же делается, но мне боле приглянулся именно D3D,
за его вот такое разделение. Можно одновременно работать в двух основных
пространствах, и у каждого из них свой базис, причем пространство XYZ
на самом деле является подпространством XYZRHW, потому, что базис его
можно выразить через базис XYZRHW путем добавления одного нулевого
элемента. :) Это конечно бред, но почти так. Я как ни будь покажу ту вещь
которую делаю, и только попробуйте сказать, что это 2D! :)))
Да, кстати, DirectDraw (мне так по крайней мере жужжали), начиная с 8.1
версии эмулируется через D3D, но не поддерживает крутых фич, которые
предоставляет D3D.
TButton (2006-05-27 21:46:00) [5]
> (TButton, смотри сюда! Вот оно!)
откуда знал, что посмотрю?! =)
и потом при всей неприязни к 3Д я больше симпатизирую ОГЛ
Cash (2006-05-27 21:16:00) [6]DevilDevil ©:
> возможно ли совмещать 2 этих режима?
Вроде НЕТ!
Для вывода 2D через Direct3D есть очень хорошая штуковина!
(TButton, смотри сюда! Вот оно!)
Имеется флаг формирования вершин, этоD3DFVF_XYZRHW
Этот флаг определяет позицию так называемой трансформированной
вершины.
Проще говоря при добавлении флага в дескриптор вершины, запись самой
вершины надо подкорректировать примерно так:
Const
MyFVF = D3DFVF_XYZRHW or D3DFVF_DIFFUSE;
Type
TMyVertex = packed record
X: single;
Y: single;
Z: single;
rhw: single;
DifColor: DWORD;
end;
Тут за X, Y, Z и rhw отвечает флаг D3DFVF_XYZRHW, а за DifColor - D3DFVF_DIFFUSE.
Тут еще есть такая штука! Z должно изменяться в пределах от 0 (ближняя
граница) од 1 (дальняя граница), а rhw должно быть 1 если вершину надо
рисовать.