|
23.04.2010, 18:26
|
#1
|
Оператор ЭВМ
Регистрация: 13.01.2010
Сообщений: 35
Написано 3 полезных сообщений (для 4 пользователей)
|
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));
Отрисовка при включении не происходит вообще, даже Ксорсовские часики Если заккоментировать строки с включением АльфаБленда, то мой квадрат отрисовывается, но естественно на альфа-состовляющую он не обращает внимание. Где я ошибся? Нужно ли включать вертексные шейдеры для нормальной работы?
|
(Offline)
|
|
23.04.2010, 18:29
|
#2
|
Модератор
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений (для 44 пользователей)
|
Ответ: Delphi & DirectX
|
(Offline)
|
|
23.04.2010, 18:47
|
#3
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Ответ: Delphi & DirectX
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.04.2010, 18:58
|
#4
|
Оператор ЭВМ
Регистрация: 13.01.2010
Сообщений: 35
Написано 3 полезных сообщений (для 4 пользователей)
|
Ответ: Delphi & DirectX
Спасибо, однако у меня почему то вместо часиков Ксорса рисуется зеленый прямоугольник
|
(Offline)
|
|
23.04.2010, 19:05
|
#5
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Ответ: Delphi & DirectX
Сообщение от firstvirus
Спасибо, однако у меня почему то вместо часиков Ксорса рисуется зеленый прямоугольник
|
Все вопросы к производителям часов.
PS. Напиши свой DrawFilledRect.
|
(Offline)
|
|
23.04.2010, 19:37
|
#6
|
Оператор ЭВМ
Регистрация: 13.01.2010
Сообщений: 35
Написано 3 полезных сообщений (для 4 пользователей)
|
Ответ: 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;
Этот кусок кода честно спи... сперт из одной статьи и немного модифицирован.
|
(Offline)
|
|
23.04.2010, 20:12
|
#7
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Ответ: Delphi & DirectX
Вроде все правильно %)
А это, покажи код очистки экрана. Может часы зеленые потому, что ты зеленым очищаешь?
|
(Offline)
|
|
23.04.2010, 21:05
|
#8
|
Оператор ЭВМ
Регистрация: 13.01.2010
Сообщений: 35
Написано 3 полезных сообщений (для 4 пользователей)
|
Ответ: Delphi & DirectX
я экран чищу xCls(); без установки цвета чистки
|
(Offline)
|
|
24.04.2010, 05:57
|
#9
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Ответ: Delphi & DirectX
Может лучше отказаться от этого движка? Или от delphi? :E
Если не сильно рыгаешь от microsoft, попробуй C# + XNA — перспективнее дельфей будет.
|
(Offline)
|
|
12.05.2010, 21:31
|
#10
|
Оператор ЭВМ
Регистрация: 13.01.2010
Сообщений: 35
Написано 3 полезных сообщений (для 4 пользователей)
|
Ответ: Delphi & DirectX
Я Си не долюбливаю, мне проще на паскале писать.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:07.
|