forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Delphi & DirectX (http://forum.boolean.name/showthread.php?t=12409)

firstvirus 23.04.2010 18:26

Delphi & DirectX
 
Пишу отрисовку 2D через D3D чтобы можно было использовать альфаканал. Столкнулся с проблемой:
Код:

D3D_Device.SetRenderState(D3DRS_ALPHABLENDENABLE,DWORD(true));
D3D_Device.SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
D3D_Device.SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
DrawFilledRect(100,300,100,100,$77FF0000,$77770000,$FFFF0000,$FF770000);
D3D_Device.SetRenderState(D3DRS_ALPHABLENDENABLE,DWORD(false));

Отрисовка при включении не происходит вообще, даже Ксорсовские часики :) Если заккоментировать строки с включением АльфаБленда, то мой квадрат отрисовывается, но естественно на альфа-состовляющую он не обращает внимание. Где я ошибся? Нужно ли включать вертексные шейдеры для нормальной работы?

WaReZ_MEN 23.04.2010 18:29

Ответ: Delphi & DirectX
 
Я не силен в DX но глянь тут мож поможет :)

http://mirgames.ru/articles/directx/dxtutorial.html

johnk 23.04.2010 18:47

Ответ: Delphi & DirectX
 
Ты забыл про SetTextureStageState.

http://www.two-kings.de/tutorials/dx...raphics07.html

firstvirus 23.04.2010 18:58

Ответ: Delphi & DirectX
 
Спасибо, однако у меня почему то вместо часиков Ксорса рисуется зеленый прямоугольник :)

johnk 23.04.2010 19:05

Ответ: Delphi & DirectX
 
Цитата:

Сообщение от firstvirus (Сообщение 145339)
Спасибо, однако у меня почему то вместо часиков Ксорса рисуется зеленый прямоугольник :)

Все вопросы к производителям часов.

PS. Напиши свой DrawFilledRect.

firstvirus 23.04.2010 19:37

Ответ: Delphi & DirectX
 
Код:

procedure DrawFilledRect(x,y,width,height:single;Color1,Color2,Color3,Color4:Cardinal);
var
  VPoint:array[0..4]of TCustomVertex;
  D3D_VB:IDirect3DVertexBuffer9;
  pVertices: Pointer;
begin
VPoint[0].x:=x;
VPoint[0].y:=y;
VPoint[0].z:=0;
VPoint[0].rhw:=0;
VPoint[0].Color:=Color1;
VPoint[1].x:=x+width;
VPoint[1].y:=y;
VPoint[1].z:=0;
VPoint[1].rhw:=0;
VPoint[1].Color:=Color2;
VPoint[2].x:=x;
VPoint[2].y:=y+height;
VPoint[2].z:=0;
VPoint[2].rhw:=0;
VPoint[2].Color:=Color3;
VPoint[3].x:=x+width;
VPoint[3].y:=y+height;
VPoint[3].z:=0;
VPoint[3].rhw:=0;
VPoint[3].Color:=Color4;
D3D_Device.CreateVertexBuffer(sizeof(VPoint),D3DUSAGE_WRITEONLY,D3DFVF_CUSTOM,D3DPOOL_DEFAULT,D3D_VB,nil);
D3D_VB.Lock(0, sizeof(VPoint), pVertices, 0);
Move(VPoint[0], pVertices^, sizeof(VPoint));
D3D_VB.Unlock;
D3D_Device.SetStreamSource(0,D3D_VB,0,sizeof(TCustomVertex));
D3D_Device.SetFVF(D3DFVF_CUSTOM);
D3D_Device.DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
end;

Этот кусок кода честно спи... сперт из одной статьи и немного модифицирован.

johnk 23.04.2010 20:12

Ответ: Delphi & DirectX
 
Вроде все правильно %)
А это, покажи код очистки экрана. Может часы зеленые потому, что ты зеленым очищаешь? :-D

firstvirus 23.04.2010 21:05

Ответ: Delphi & DirectX
 
я экран чищу xCls(); без установки цвета чистки :)

johnk 24.04.2010 05:57

Ответ: Delphi & DirectX
 
Может лучше отказаться от этого движка? Или от delphi? :E
Если не сильно рыгаешь от microsoft, попробуй C# + XNA — перспективнее дельфей будет.

firstvirus 12.05.2010 21:31

Ответ: Delphi & DirectX
 
Я Си не долюбливаю, мне проще на паскале писать.


Часовой пояс GMT +4, время: 08:40.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot