Форум: "Игры";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c