Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Direct3D   Найти похожие ветки 

 
Gigabyte ©   (2003-10-17 19:16) [0]

Знатоки, помогите начинающему. Работаю с Direct3D но он не хочет виводить объекты на экран. Просто выводит черный фон и все. Скиньте кто нить хотя бы простенький исходних какого-то "куба", только чтоб работал. А то все примеры что я нашел - тот же эфект "черный фон".
Заранее благодарен


 
VitGun ©   (2003-10-19 19:09) [1]

Где процедура рендеринга? Телепатов тута нету...


 
Gigabyte ©   (2003-10-25 09:17) [2]


Type
TSimpleLine = packed record
 x,y,z:Single;
end;
TData = array[0..19] of TSimpleLine;
{$R *.dfm}

function MakeSimpleLine(ax,ay,az:Single):TSimpleLine;
begin
Result.x:=ax;
Result.y:=ay;
Result.z:=az;
end;

procedure TForm1.FormCreate(Sender: TObject);
var  DP:TD3DPresentParameters;
begin
ListBox1.Items.Add("begin");
D3D:=Direct3DCreate8(D3D_SDK_VERSION);
try
if D3D=nil then Exit;
D3D.GetAdapterDisplayMode(0,DM);
ZeroMemory(@DP,SizeOf(DP));
DP.Windowed:=True;
DP.hDeviceWindow:=Panel1.Handle;
DP.SwapEffect:=D3DSWAPEFFECT_COPY;
DP.EnableAutoDepthStencil:=True;
DP.AutoDepthStencilFormat:=D3DFMT_D16;
DP.BackBufferFormat:=DM.Format;
OleCheck(D3D.CreateDevice(0,D3DDEVTYPE_REF,Panel1.Handle,D3DCREATE_SOFTWARE_VERTEXPROCESSING,DP,Dev));
if dev=nil then Exit;
finally
D3D:=nil;
ListBox1.Items.Add("done");
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Texture:IDirect3DCubeTexture8;
   buffer:IDirect3DVertexBuffer8;
   Light:TD3DLight8;
   Data:^TData;
begin
OleCheck(dev.Clear(0,nil,D3DCLEAR_TARGET,D3DCOLOR_COLORVALUE(1.0,1.0,1.0,1.0),1.0,0));
(*ZeroMemory(@Light,SizeOf(Light));
OleCheck(dev.BeginScene);
try
LIght._Type:=D3DLIGHT_SPOT;
Light.Diffuse.r:=1.0;
Light.Diffuse.g:=1.0;
Light.Diffuse.b:=1.0;
Light.Diffuse.a:=1.0;
OleCheck(dev.SetLight(0,Light));
OleCheck(dev.LightEnable(0,True));
OleCheck(dev.CreateVertexBuffer(20*SizeOf(TSimpleLine),0,D3DFVF_XYZ,D3DPOOL_DEFAULT,buffer));
Buffer.Lock(0,0,PByte(Data),0);
try
Data^[0]:=MakeSimpleLine(1.0,1.0,1.0);
Data^[1]:=MakeSimpleLine(-1.0,1.0,1.0);
Data^[2]:=MakeSimpleLine(-1.0,-1.0,1.0);
Data^[3]:=MakeSimpleLine(1.0,-1.0,1.0);

Data^[4]:=MakeSimpleLine(-1.0,1.0,1.0);
Data^[5]:=MakeSimpleLine(-1.0,1.0,-1.0);
Data^[6]:=MakeSimpleLine(-1.0,-1.0,-1.0);
Data^[7]:=MakeSimpleLine(-1.0,-1.0,1.0);

Data^[8]:=MakeSimpleLine(-1.0,1.0,-1.0);
Data^[9]:=MakeSimpleLine(-1.0,1.0,1.0);
Data^[10]:=MakeSimpleLine(1.0,1.0,1.0);
Data^[11]:=MakeSimpleLine(1.0,1.0,-1.0);

Data^[12]:=MakeSimpleLine(1.0,-1.0,-1.0);
Data^[13]:=MakeSimpleLine(1.0,-1.0,1.0);
Data^[14]:=MakeSimpleLine(1.0,1.0,1.0);
Data^[15]:=MakeSimpleLine(1.0,1.0,-1.0);

Data^[16]:=MakeSimpleLine(1.0,-1.0,1.0);
Data^[17]:=MakeSimpleLine(1.0,-1.0,-1.0);
Data^[18]:=MakeSimpleLine(-1.0,-1.0,-1.0);
Data^[19]:=MakeSimpleLine(-1.0,-1.0,1.0);
finally
Buffer.Unlock;
end;
OleCheck(dev.SetRenderState(D3DRS_SHADEMODE,iTrue));
OleCheck(dev.SetStreamSource(0,buffer,SizeOf(TSimpleLine)));
OleCheck(dev.SetVertexShader(D3DFVF_XYZ));
dev.
OleCheck(dev.DrawPrimitive(D3DPT_TRIANGLESTRIP,0,High(TData)+1-2));
finally
OleCheck(dev.EndScene);
end;                                 *)
OleCheck(dev.Present(nil,nil,Panel1.Handle,nil));
buffer:=nil;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
dev:=nil;
d3d:=nil;
end;

end.


 
Gigabyte ©   (2003-10-25 09:19) [3]

Я понимаю что чето не додал или чете "передал", но вот что????


 
Sapersky ©   (2003-10-26 00:56) [4]

Всё плохо :) В смысле, пример довольно кривой. Даже неохота во всё тыкать по порядку, к тому же я D3D8 не очень хорошо помню.
Вот здесь:

http://clootie.narod.ru/

очень много всяких кубов и прочих фигур, собственно, весь SDK переведён.
Кроме того, советую посмотреть теорию (тот же gamedev.ru) - чтобы не освещать объект без нормалей источником света неизвестного направления и положения ну и т.д.


 
VitGun ©   (2003-10-26 21:18) [5]

Ыыы...я может чего-то не понимаю, но зачем было создание куба, источника света и пр. засовывать в обработчик кнопки, ИМХО все должно быть в таймере.
З.Ы. Один совет. Если начинаешь писать графические приложения, то забудь про VCL, пиши на WinAPI, так проще...


 
Sapersky ©   (2003-10-27 01:03) [6]

зачем было создание куба, источника света и пр. засовывать в обработчик кнопки, ИМХО все должно быть в таймере

Час от часу не легче :) Может, я совсем ничего не понимаю, но ИМХО создание куба, источника света и пр. должно быть в начале (OnCreate, OnShow). А вывод (DrawPrimitive) - в OnIdle (можно по таймеру, но лучше не).


 
VitGun ©   (2003-10-27 05:21) [7]

ИМХО создание куба, источника света и пр. должно быть в начале (OnCreate, OnShow).

Ну оговорился я :) Чего с похмела не бывает...:))



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
14-1081133494
face
2004-04-05 06:51
2004.04.25
Как заработать деньги в инете


8-1068846700
BlaMyr
2003-11-15 00:51
2004.04.25
Миниатюры графических файлов.


3-1080218877
alex123
2004-03-25 15:47
2004.04.25
Как сохранить в Excel больше 65000 записей из таблицы


7-1078170253
Mishenka
2004-03-01 22:44
2004.04.25
Как удалить файл в корзину?


6-1078207354
mip
2004-03-02 09:02
2004.04.25
Подскажите плз. как написать свой Chat на D7?