Главная страница
    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.47 MB
Время: 0.033 c
3-1080462762
Хамс
2004-03-28 12:32
2004.04.25
Как запихнуть в Interbase офскую DB изображение ?


7-1077476311
mixvictor
2004-02-22 21:58
2004.04.25
Программирование LPT порта.


1-1081242287
Tornado
2004-04-06 13:04
2004.04.25
Преобразование DOS -> Win


4-1077858382
sapsi
2004-02-27 08:06
2004.04.25
Сообщение при минимизации окна


1-1081173871
Berezne
2004-04-05 18:04
2004.04.25
Как мне закрить предидущую форму???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский