Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.034 c
6-1077500554
elf_123
2004-02-23 04:42
2004.04.25
Система&Email


14-1080793291
Gero
2004-04-01 08:21
2004.04.25
Основателю Microsoft очень стыдно за Windows


1-1081185321
В л а д и м и р
2004-04-05 21:15
2004.04.25
TEdit: проверка на ввод информации


4-1074510385
Oyster
2004-01-19 14:06
2004.04.25
Какой диалог подстраивается под язык системы?


3-1080389025
Новичек2
2004-03-27 15:03
2004.04.25
TDBAdvStringGrid и выравнивание по вертикали.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский