Главная страница
    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.037 c
11-1064308389
Vadim S
2003-09-23 13:13
2004.04.25
Директива {$WARN SYMBOL_PLATFORM OFF} (KOLSysUtils.pas)


3-1080732484
Lam
2004-03-31 15:28
2004.04.25
Вычитание таблиц


6-1077164853
CASPER
2004-02-19 07:27
2004.04.25
Игра по сети


6-1077880530
sucer
2004-02-27 14:15
2004.04.25
Поблема с NetMessageBufferSend


1-1081414798
BorisMor
2004-04-08 12:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский