Как рисовать в 2д в дх9. Какие интерфейсы смотреть и тд? Подскажите...
IDirect3DDevice9::DrawPrimitiveUP
CyberManiac видимо хотел сказать, что тебе нужно представлять 2D объекты как квады в 3D пространстве, всегда повернутые лицом к камере. На эти квады натягивается текстура с изображением спрайта с включенным альфа-блендингом. Далее загоняешь все в вертекс-буффер и рисуешь через DrawPrimitive или DrawPrimitiveUP. Второй способ не требует вертекс-буффера, а рисует прямо из ОЗУ.
Ога, я это уже пробовал рисовать, вышло. Как с вертексным буфером, так и без него..
Тогда какой формат использовать вершин RHW или просто XYZ? И почему бы просто спрайт не рисовать? Вообщем посоветуйте как мастера сейчас рисуют))
Spiteful
Говорят, что спрайтами медленно, еще говорят, что лучше RHW, ибо он большую часть конвейера пролетает без преобразований. Я в 2Д как-то не очень...
А как просто спрайтами?
PS
Жалко, что DirectDraw больше не поддерживается Microsoft.
Наверное так http://www.daniellove.net/blog/?p=179
спасибо!
Еще можно подключить - D3DX9
и потом -
g_sprite:ID3DXSprite;//Спрайт на который идет вывод с текстуры
g_sprite:=nil;
if g_sprite=nil then begin;
if failed (D3DXCreateSprite(g_pd3dDevice,g_sprite )) then ErrorOut(hRet,'ERROR CreateD3DXCreateSprite');
end;
if failed (g_pd3dDevice.BeginScene) then begin
if Failed (RestoreAll) then begin
ErrorOut(hRet,'BeginScene');
exit;
end;
end;
if failed (g_sprite._begin(D3DXSPRITE_ALPHABLEND)) then begin
if Failed (RestoreAll) then begin;
ErrorOut(hRet,'g_sprite.BeginScene');
exit;
end;
end;
SetRect(MyRect,0, 0,32,32);
DPosition:=D3DXVECTOR3( mouseX, mouseY, 0.0 );
if FAILED (g_sprite.Draw(Surfaces[0].Texture,@MyRect,nil,@DPosition,$ffffffff)) then begin // рисую спрайт
hRet:=0;
ErrorOut(hRet,'Not Draw');
end;
g_sprite._End;
g_pd3dDevice.EndScene;
g_pd3dDevice.Present(nil,nil,0,nil);
if assigned (g_sprite) then begin
g_sprite._Release;
g_sprite:=nil;
end;
Работает достаточно шустренько.
И еще - Спайты всегда рисуются поверх 3D объектов.
Spiteful
> RHW
Для него можно шейдеры делать?
X512
Ну, наверное, только пиксельные) Вершины-то уже преобразованные..
diplay
> Жалко, что DirectDraw больше не поддерживается Microsoft.
Кстати, откуда такая инфа? Я вот им пользуюсь, и в ДХ СДК за март 2009 есть и ddraw.h и ddraw.lib.
P.S. Впрочем, тоже задумываюсь об иных путях.
sb3d
он там для совместимости
но с 7го дх не обновлялся а с 9го объявлен устаревшим и не рекомендуемым к использованию
Denadan
Спасибо, знач мне надо активнее думать об других путях вывода 2д.
diplay
> Жалко, что DirectDraw больше не поддерживается Microsoft.
Теперь есть Direct2D :)
Тема в архиве.