ПрограммированиеФорум2D графика и изометрия

2D в DX9

Страницы: 1 2 Следующая »
#0
14:12, 26 мая 2009

Как рисовать в 2д в дх9. Какие интерфейсы смотреть и тд? Подскажите...

#1
14:20, 26 мая 2009

IDirect3DDevice9::DrawPrimitiveUP

#2
14:25, 26 мая 2009

CyberManiac видимо хотел сказать, что тебе нужно представлять 2D объекты как квады в 3D пространстве, всегда повернутые лицом к камере. На эти квады натягивается текстура с изображением спрайта с включенным альфа-блендингом. Далее загоняешь все в вертекс-буффер и рисуешь через DrawPrimitive или DrawPrimitiveUP. Второй способ не требует вертекс-буффера, а рисует прямо из ОЗУ.

#3
14:34, 26 мая 2009

Ога, я это уже пробовал рисовать, вышло. Как с вертексным буфером, так и без него..

Тогда какой формат использовать вершин RHW или просто XYZ? И почему бы просто спрайт не рисовать? Вообщем посоветуйте как мастера сейчас рисуют))

#4
14:57, 26 мая 2009

Spiteful
Говорят, что спрайтами медленно, еще говорят, что лучше RHW, ибо он большую часть конвейера пролетает без преобразований. Я в 2Д как-то не очень...

#5
18:46, 26 мая 2009

А как просто спрайтами?

PS
Жалко, что DirectDraw больше не поддерживается Microsoft.

#6
19:07, 26 мая 2009

Наверное так http://www.daniellove.net/blog/?p=179

#7
21:01, 26 мая 2009

спасибо!

#8
10:35, 3 июля 2009

Еще можно подключить - 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 объектов.

#9
10:44, 3 июля 2009

Spiteful
> RHW
Для него можно шейдеры делать?

#10
12:14, 3 июля 2009

X512

Ну, наверное, только пиксельные) Вершины-то уже преобразованные..

#11
14:57, 3 июля 2009

diplay
> Жалко, что DirectDraw больше не поддерживается Microsoft.
Кстати, откуда такая инфа? Я вот им пользуюсь, и в ДХ СДК за март 2009 есть и ddraw.h и ddraw.lib.

P.S. Впрочем, тоже задумываюсь об иных путях.

#12
15:06, 3 июля 2009

sb3d
он там для совместимости
но с 7го дх не обновлялся а с 9го объявлен устаревшим и не рекомендуемым к использованию

#13
15:26, 3 июля 2009

Denadan
Спасибо, знач мне надо активнее думать об других путях вывода 2д.

#14
20:50, 3 июля 2009

diplay
> Жалко, что DirectDraw больше не поддерживается Microsoft.

Теперь есть Direct2D :)

Страницы: 1 2 Следующая »
ПрограммированиеФорум2D графика и изометрия

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