Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

В очередной раз попытался научиться 3D-программированию...   Найти похожие ветки 

 
ProgRAMmer Dimonych ©   (2007-03-17 21:08) [0]

Результаты печальные. Если с OpenGL ещё кое-как нарисовал нечто примитивное (летающие шары (точнее камера)), то DirectX - глухо.

Во всех книгах, которыми мне довелось пользоваться, пропущены замечания по изменениям в коде программы. Из-за этого приходится, добавляя свои ошибки, искать причину неправильной работы программы, написанной в полном соответствии с текстом книги-учебника. Если верить легендам, то так раньше баги отлавливали: чтобы отловить 50, добавляли ещё 100, а затем их искали и оценивали общее количество багов (перемудрил маленько :)).

То, что по Краснову уже во втором разделе по Direct3D приходилось брать исходник с компакта - это было ещё терпимо, потому что другого от этой книги я и не ожидал :(. Скачал электронный вариант: кроме ошибок самой книги добавились результаты неправильного распознавания при сканировании.

Некоторые надежды возлагал на книгу "DirectX9. Уроки программирования на C++" Горнакова, хотя некоторое сходство структуры книги с Красновской "DirectX-графика в проектах Delphi" настораживало. На практике изложение оказалось более приятным. Но попытка построить куб через IDirect3DIndexBuffer9 закончилась провалом: многократные сравнения кода на Delphi и кода на C++ из учебника не дало результатов, и куб так и не нарисовался.

Посоветуйте, пожалуйста, какую-нибудь действительно "безглючную" (относительно) книгу по DirectX (любой версии, чем меньше, тем лучше).

Заренее спс.


 
XProger ©   (2007-03-17 21:14) [1]

SDK лучше книги не найдёшь, честно говорю )


 
@!!ex ©   (2007-03-17 21:20) [2]

> "DirectX9. Уроки программирования на C++" Горнакова

Читать надо что пишут. Об этой книге здесь уже отзывались. И я в том числе. И не очень хорошо. ;)
Краснова не видел.


> SDK лучше книги не найдёшь, честно говорю )

SDK действительно тема, но там все сильно замороченно.
Вместо простого примера на какую нибудь штуку - вагон кода, классы и т.д.

P.S>
ИМХО научится 3Д программированию можно только если есть какая то задача.
Лично я парился пол года. Все читаю. Все понимаю. Но сделать ничего не получается. НЕ откладываются прочитанные данные в нормальные знания.
Появилась задача, за пару дней все понял и осознал.


 
ProgRAMmer Dimonych ©   (2007-03-17 21:22) [3]

> XProger ©   (17.03.07 21:14) [1]
И сам бы рад, да весит больно много... А интернет у меня не казённый. 20Мб - это по моим меркам не слабо.

Честно говоря, специально скачивал эти, как их, лень смотреть, Clootie, кажись, заголовочные файлы для DX9.

А есть вообще где-нибудь вырезка из этого самого SDK, необходимый минимум?


 
ProgRAMmer Dimonych ©   (2007-03-17 21:26) [4]

> @!!ex ©   (17.03.07 21:20) [2]
Самое забавное, что задачка-то есть. Не на один день, и не на одну неделю даже без 3D-графики. Но вот, честно говоря, по вышеперечисленным книгам работать с освещением не получилось: к этому моменту накапливается столько мелких недочётов, что работать дальше просто нельзя.

Вообще главная проблема этих книг: "вот в этой процедурке поменялось число, которое, вообще говоря, мало на что влияет" - это сказать важно, а про то, что в другом месте мы поменяли что-то действительно важное - это не так уж и важно.


 
oxffff ©   (2007-03-17 21:29) [5]

Что за трудности?


 
Zeqfreed ©   (2007-03-17 21:33) [6]

Чем OpenGL не угодил? По нему отличные мануалы есть.


 
ProgRAMmer Dimonych ©   (2007-03-17 21:38) [7]

> oxffff ©   (17.03.07 21:29) [5]
Что обидно, трудностей в понимании теоретического материала нет, а вот практика страдает из-за недоговорок со стороны автора. :(

> Zeqfreed ©   (17.03.07 21:33) [6]
Прямых ссылок не подкинете?


 
oxffff ©   (2007-03-17 21:40) [8]

Для построения куба используй из Direct3D Extension
HRESULT D3DXCreateBox(          LPDIRECT3DDEVICE9 pDevice,
   FLOAT Width,
   FLOAT Height,
   FLOAT Depth,
   LPD3DXMESH *ppMesh,
   LPD3DXBUFFER *ppAdjacency
);

Для освещения необходимо также использовать материал

Перед этим устанавливаем материал
material.Diffuse.r:=1;
material.Diffuse.g:=1;
material.Diffuse.b:=1;
material.Diffuse.a:=0;

material.Ambient.r:=0;
material.Ambient.g:=0;
material.Ambient.b:=0;
material.Ambient.a:=0;

material.Specular.r:=0;
material.Specular.g:=0;
material.Specular.b:=0;
material.Specular.a:=0;
material.Power:=0;

material.Emissive.r:=0.2;
material.Emissive.g:=0.2;
material.Emissive.b:=0.2;
material.Emissive.a:=0.2;

SetMaterial(material);

//Включаем свет
SetRenderState(D3DRS_LIGHTING, DWORD (TRUE));


 
oxffff ©   (2007-03-17 21:41) [9]


> > oxffff ©   (17.03.07 21:29) [5]
> Что обидно, трудностей в понимании теоретического материала
> нет, а вот практика страдает из-за недоговорок со стороны
> автора. :(


Пиши. Сейчас решим.


 
eXPell ©   (2007-03-17 21:42) [10]


> Прямых ссылок не подкинете?

тут когда-то встречал:
http://ihtik.lib.ru/dreamhost_complit_22janv2007.html

ЗЫ. на "20 метров" кинь ссылку:)


 
oxffff ©   (2007-03-17 21:47) [11]

Выкини Краснова

Скачай для начала
Introduction to 3D Game Programming with DirectX® 9.0
Frank D. Luna Technical review by Rod Lopez


 
oxffff ©   (2007-03-17 21:56) [12]

>Но попытка построить куб через IDirect3DIndexBuffer9 закончилась провалом

CreateMesh(Direct3DDevice,FVF,Options,facesCount,VerticesCount,mesh);

/// Заполняем вершины
///
VertexSize:=mesh.GetNumBytesPerVertex;
mesh.LockVertexBuffer(0,PMemoryBlock);
Pdata:=PMemoryBlock;

for k:=1 to VerticesCountZ do
 for j:=0 to SegmentYCount do
   for i:=0 to SegmentXCount do
     begin
     PTVERTEX_XYZ(pdata)^.x:=Offsets.x+SegmentSize.x*i;
     PTVERTEX_XYZ(pdata)^.y:=Offsets.y+SegmentSize.y*j;
     PTVERTEX_XYZ(pdata)^.z:=0;
     inc(pbyte(Pdata),VertexSize);
     end;
mesh.UnlockVertexBuffer;

/// Заполняем индексы
///
mesh.GetIndexBuffer(IIndexBuffer);
FillGridIndexBuff(IIndexBuffer,0,CW,0,VerticesCountX,VerticesCountY);

IIndexBuffer:=nil;

Заполняем буфер принадлежности подмножеству 0
mesh.LockAttributeBuffer(0,plw);
ZeroMemory(plw,sizeof(DWORD)*mesh.GetNumFaces);
mesh.UnlockAttributeBuffer;
D3DXComputeNormals(mesh,nil);

//
//Функция заполнения индексного буфера при 16бит индексах

function FillGridIndex16Buff(PmemoryBlock:PWORD;VERVEXORDER:TVERVEXORDER;StartIndex,Verte xCountX,VertexCountY:DWORD;var pend:pointer):integer;
var i,j:integer;
   Pdata:pword;
begin
pdata:=PmemoryBlock;
case VERVEXORDER of
CW:
 begin
 for j:=0 to VertexCountY-2 do
   for i:=0 to VertexCountX-2 do
      begin
      Pdata^:=StartIndex+(j*VertexCountX)+i;
      inc(Pdata);
      Pdata^:=StartIndex+(j*VertexCountX)+i+1;
      inc(Pdata);
      Pdata^:=StartIndex+(j+1)*VertexCountX+i;
      inc(Pdata);
      Pdata^:=StartIndex+(j*VertexCountX)+i+1;
      inc(Pdata);
      Pdata^:=StartIndex+(j+1)*VertexCountX+i+1;
      inc(Pdata);
      Pdata^:=StartIndex+(j+1)*VertexCountX+i;
      inc(Pdata);
      end;
 end;
CCW:begin
 for j:=0 to VertexCountY-2 do
    for i:=0 to VertexCountX-2 do
     begin
     Pdata^:=StartIndex+(j*VertexCountX)+i+1;
     inc(Pdata);
     Pdata^:=StartIndex+(j*VertexCountX)+i;
     inc(Pdata);
     Pdata^:=StartIndex+(j+1)*VertexCountX+i;
     inc(Pdata);
     Pdata^:=StartIndex+(j*VertexCountX)+i+1;
     inc(Pdata);
     Pdata^:=StartIndex+(j+1)*VertexCountX+i;
     inc(Pdata);
     Pdata^:=StartIndex+(j+1)*VertexCountX+i+1;
     inc(Pdata);
     end;
 end;
else;
end;
pend:=Pdata;
end;

Прошу прощения выдерал из своего давнишнего проекта.


 
ProgRAMmer Dimonych ©   (2007-03-17 21:57) [13]

> oxffff ©   (17.03.07 21:47) [11]
Качаю.

> oxffff ©   (17.03.07 21:41) [9]
Если не поможет, швырну сюда код. А вообще было бы здорово на DelphiMaster"е забомбить что-то типа Википедии: каждый может что-то добавить. А потом отсеивать лишнее и делать в виде учебника по той или иной теме.


 
ProgRAMmer Dimonych ©   (2007-03-17 21:59) [14]

> oxffff ©   (17.03.07 21:56) [12]
Mesh? Где-то я это загадочное слово читал... Только там без этого всего было. Собственно, вот листинг юнита с формой...

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Direct3D9, AppEvnts, D3DX9;

const
 D3DFVF_CUSTOMVERTEX=D3DFVF_XYZ or D3DFVF_DIFFUSE;

type
 TCustomVertex=record
  X,Y,Z:Single;
  Color:DWORD;
 end;
 TMain = class(TForm)
   ApplicationEvents1: TApplicationEvents;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
 private
   DXObj:IDirect3D9;
   DXDev:IDirect3DDevice9;
   DXVB:IDirect3DVertexBuffer9;
   function Init:HRESULT;
   procedure DeInit;
   function Render:HRESULT;
   function InitObject:HRESULT;
   function WorkMatrix:HRESULT;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Main: TMain;

implementation

{$R *.dfm}

function TMain.Init:HRESULT;
var
DM:D3DDisplayMode;
pp:D3DPresent_Parameters;
begin
Result:=E_FAIL;
DXObj:=nil;
DXObj:=Direct3DCreate9(D3D_SDK_VERSION);
if DXObj=nil then Exit;
if Failed(DXObj.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,DM)) then Exit;
ZeroMemory(@pp,SizeOF(pp));
pp.Windowed:=True;
pp.SwapEffect:=D3DSWAPEFFECT_DISCARD;
pp.BackBufferFormat:=DM.Format;
pp.EnableAutoDepthStencil:=True;
pp.AutoDepthStencilFormat:=D3DFMT_D16;
if Failed(DXObj.CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,Main.Handle,D3DCREAT E_HARDWARE_VERTEXPROCESSING,@pp,DXDev)) then Exit;
if Failed(DXDev.SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE)) then Exit;
if Failed(DXDev.SetRenderState(D3DRS_LIGHTING,0)) then Exit;
if Failed(DXDev.SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE)) then Exit;
Result:=S_OK;
end;

procedure TMain.DeInit;
begin
if Assigned(DXVB) then begin DXVB._Release; DXVB:=nil; end;
if Assigned(DXDev) then begin DXDev._Release; DXDev:=nil; end;
if Assigned(DXObj) then begin DXObj._Release; DXObj:=nil; end;
end;

procedure TMain.FormCreate(Sender: TObject);
begin
if Failed(Init) then begin DeInit; Application.Terminate; end;
if Failed(InitObject) then begin DeInit; Application.Terminate; end;
end;

procedure TMain.FormDestroy(Sender: TObject);
begin
DeInit;
end;

function TMain.Render:HRESULT;
begin
Result:=E_FAIL;
if DXDev=nil then Exit;
if Failed(DXDev.Clear(0,nil,D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(60,100,150),1.0,0)) then Exit;
if Failed(DXDev.BeginScene) then Exit;
if Failed(WorkMatrix) then Exit;
if Failed(DXDev.SetStreamSource(0,DXVB,0,SizeOf(TCustomVertex))) then Exit;
if Failed(DXDev.SetFVF(D3DFVF_CUSTOMVERTEX)) then Exit;
if Failed(DXDev.DrawPrimitive(D3DPT_TRIANGLELIST,0,12)) then Exit;
if Failed(DXDev.EndScene) then Exit;
if Failed(DXDev.Present(nil,nil,0,nil)) then Exit;
Result:=S_OK;
end;

procedure TMain.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
if Failed(Render) then begin DeInit; Exit; end;
Done:=False;
end;

function TMain.InitObject:HRESULT;
const
Verts:array [0..23] of TCustomVertex=
((X:1;Y:-1;Z:-1;Color:$00000FFF),
 (X:1;Y:1;Z:-1;Color:$00000FFF),
 (X:-1;Y:1;Z:-1;Color:$00000FFF),
 (X:-1;Y:-1;Z:-1;Color:$00000FFF),

 (X:-1;Y:-1;Z:-1;Color:$FFFF0000),
 (X:-1;Y:1;Z:-1;Color:$FFFF0000),
 (X:-1;Y:1;Z:1;Color:$FFFF0000),
 (X:-1;Y:-1;Z:1;Color:$FFFF0000),

 (X:-1;Y:-1;Z:1;Color:$00000FFF),
 (X:-1;Y:1;Z:1;Color:$00000FFF),
 (X:1;Y:1;Z:1;Color:$00000FFF),
 (X:1;Y:-1;Z:1;Color:$00000FFF),

 (X:1;Y:-1;Z:1;Color:$FF0FFF00),
 (X:1;Y:1;Z:1;Color:$FF0FFF00),
 (X:1;Y:1;Z:-1;Color:$FF0FFF00),
 (X:1;Y:-1;Z:-1;Color:$FF0FFF00),

 (X:1;Y:-1;Z:-1;Color:$FFF000FF),
 (X:-1;Y:-1;Z:-1;Color:$FFF000FF),
 (X:-1;Y:-1;Z:1;Color:$FFF000FF),
 (X:1;Y:-1;Z:1;Color:$FFF000FF),

 (X:1;Y:1;Z:1;Color:$FFF000FF),
 (X:-1;Y:1;Z:1;Color:$FFF000FF),
 (X:-1;Y:1;Z:-1;Color:$FFF000FF),
 (X:1;Y:1;Z:-1;Color:$FFF000FF));
var
pVerts:Pointer;
begin
Result:=E_FAIL;
if Failed(DXDev.CreateVertexBuffer(SizeOf(Verts),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFA ULT,DXVB,nil)) then Exit;
if Failed(DXVB.Lock(0,SizeOf(Verts),pVerts,0)) then Exit;
CopyMemory(pVerts,@Verts,SizeOf(Verts));
if Failed(DXVB.Unlock) then Exit;

Result:=S_OK;
end;

function TMain.WorkMatrix:HRESULT;
const
FullTime=1000;
var
WorldX,WorldY:TD3DMATRIX;
World,View,Projection:TD3DXMATRIX;
Time:DWORD;
Angle:Single;
begin
Result:=E_FAIL;
//World
Time:=GetTickCount mod FullTime;
Angle:=Time*(2*D3DX_PI)/FullTime;
D3DXMatrixRotationX(WorldX,Angle);
D3DXMatrixRotationY(WorldY,Angle);
D3DXMatrixMultiply(World,WorldX,WorldY);
if Failed(DXDev.SetTransform(D3DTS_WORLD,World)) then Exit;
//View
D3DXMatrixLookAtLH(View,D3DXVector3(0,0,-8),D3DXVector3(0,0,0),D3DXVector3(0,1,0));
if Failed(DXDev.SetTransform(D3DTS_VIEW,View)) then Exit;
//Projection
D3DXMatrixPerspectiveFovLH(Projection,D3DX_PI/4,1,1,100);
if Failed(DXDev.SetTransform(D3DTS_PROJECTION,Projection)) then Exit;
Result:=S_OK;
end;

end.


 
ProgRAMmer Dimonych ©   (2007-03-17 22:00) [15]

Вот ёлки-пионерки... Отступы пообрезало :(


 
oxffff ©   (2007-03-17 22:02) [16]

Напиши, что у тебя не получается?

У меня Dial up.

Я проправлю и через час запостирую.

OK?


 
oxffff ©   (2007-03-17 22:04) [17]


> Mesh? Где-то я это загадочное слово читал...


Это wrapper для VertexBuffer+indexBuferr+Additional....


 
Zeqfreed ©   (2007-03-17 22:04) [18]

http://www.sulaco.co.za/
http://nehe.gamedev.net/

Это, так сказать, классика OpenGL.


 
ProgRAMmer Dimonych ©   (2007-03-17 22:09) [19]

> oxffff ©   (17.03.07 22:02) [16]
Не получается собственно куб. Никакой. Когда методом тыка меняю хоть что-то, что может повлиять на работу приложения, видны отдельные треугольники.

SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE) пробовал в первую очередь, несколько раз прикидывал, вроде, вершины правильно перечислены, по часовой стрелке...

Проект представляет собой одну форму с TApplicationEvents на ней. Весь код см. выше.


 
oxffff ©   (2007-03-17 22:15) [20]


> ProgRAMmer Dimonych ©   (17.03.07 22:09) [19]


В течение час пришлю куб


 
oxffff ©   (2007-03-17 23:12) [21]

Вращающийся куб

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs,direct3D9,d3dx9, ExtCtrls, StdCtrls;

type

 TForm1 = class(TForm)
   Button1: TButton;
   Panel1: TPanel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 protected
 Direct3d9:IDirect3D9;
 Direct3D9Device:IDirect3DDevice9;
 DisplayMode:TD3DDisplayMode;
 Direct3d9PP:TD3DPresent_Parameters;
//  vertexshader:IDirect3DVertexShader9;
 THREAD_TERMINATE_EVENT:THANDLE;
 ThreadHandle:THandle;
 public
   { Public declarations }
 constructor create(AOwner: TComponent);override;
 destructor destroy;override;
 end;

var
 Form1: TForm1;
 Direct3d9:IDirect3D9;

implementation

{$R *.dfm}

{ TForm1 }

constructor TForm1.create(AOwner: TComponent);
var matrix:TD3DXMatrix;
begin
inherited;
Direct3d9:=Direct3DCreate9(D3D_SDK_VERSION);
Direct3d9.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,DisplayMode);
ZeroMemory(@Direct3d9PP,sizeof(Direct3d9PP));
Direct3d9PP.Windowed:=true;
Direct3d9PP.SwapEffect:=D3DSWAPEFFECT_DISCARD;
Direct3d9PP.BackBufferFormat:=DisplayMode.Format;
Direct3d9PP.EnableAutoDepthStencil:=true;
Direct3d9PP.AutoDepthStencilFormat:=D3DFMT_D16;
Direct3d9.CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,Panel1.Handle,D3DCREATE _SOFTWARE_VERTEXPROCESSING,Direct3d9PP,Direct3D9Device);
ThreadHandle:=INVALID_HANDLE_VALUE;
THREAD_TERMINATE_EVENT:=CreateEvent(nil,false,false,nil);
end;

destructor TForm1.destroy;
begin
if ThreadHandle<>INVALID_HANDLE_VALUE then
      begin
      SignalObjectAndWait(THREAD_TERMINATE_EVENT,ThreadHandle,INFINITE,false);
      end;
CloseHandle(THREAD_TERMINATE_EVENT);
Direct3D9Device:=nil;
Direct3d9:=nil;
inherited;
end;

function RotateThread(pvalue:pointer):DWORD;stdcall;
var cube_mesh:ID3DXMesh;
   Hres:HResult;
   MatrixWorld,matrixView,matrixProjection:TD3DMatrix;
   a:single;
   material:TD3DMaterial9;
   light:TD3DLight9;
begin
with form1 do
begin

Hres:=D3DXCreateBox(Direct3D9Device,300,200,100,cube_mesh,nil);
Direct3D9Device.SetRenderState(D3DRS_LIGHTING, DWORD (false));

 Direct3D9Device.SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
 Direct3D9Device.SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
 Direct3D9Device.SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);

 D3DXMatrixLookAtLH(matrixView,D3DXVECTOR3(200,200,-290),D3DXVECTOR3(0, 0, 0 ),D3DXVECTOR3( 0.0, 1.0, 0.0 ) );
 D3DXMatrixPerspectiveFovLH(matrixProjection,D3DX_PI/2,1,1,2000);
 Direct3D9Device.SetTransform(D3DTS_VIEW,matrixView);
 Direct3D9Device.SetTransform(D3DTS_PROJECTION,matrixProjection);

light._Type:=D3DLIGHT_DIRECTIONAL;

light.Diffuse.r:=1.0;
light.Diffuse.g:=1.0;
light.Diffuse.b:=1.0;

light.Specular.r:=0;
light.Specular.g:=0;
light.Specular.b:=0;

light.Ambient.r:=0;
light.Ambient.g:=0;
light.Ambient.b:=0;

light.Direction.x:=5;
light.Direction.y:=5;
light.Direction.z:=8;

material.Diffuse.r:=1;
material.Diffuse.g:=0.5;
material.Diffuse.b:=1;
material.Diffuse.a:=0;

material.Ambient.r:=0;
material.Ambient.g:=0;
material.Ambient.b:=0;
material.Ambient.a:=0;

material.Specular.r:=0;
material.Specular.g:=0;
material.Specular.b:=0;
material.Specular.a:=0;
material.Power:=0;

material.Emissive.r:=0.2;
material.Emissive.g:=0.2;
material.Emissive.b:=0.2;
material.Emissive.a:=0.2;

Direct3D9Device.SetLight(0,light);
Direct3D9Device.LightEnable(0,true);
Direct3D9Device.SetMaterial(material);
Direct3D9Device.SetRenderState(D3DRS_LIGHTING, DWORD (true));
 MatrixWorld:=D3DXMatrixIdentity;
 a:=0;
 while true do
         begin
       case WaitForSingleObject(THREAD_TERMINATE_EVENT,0) of
          WAIT_TIMEOUT:;
          else
             break;
          end;
        Direct3D9Device.Clear(0,nil,D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER,RGB(200,200,200),1.0,0);
        D3DXMatrixRotationY(MatrixWorld,a);
        a:=a+0.01;
        Direct3D9Device.SetTransform(D3DTS_WORLD,MatrixWorld);
        Direct3D9Device.BeginScene;
        cube_mesh.DrawSubset(0);
        Direct3D9Device.EndScene;
        Direct3D9Device.Present(nil,nil,0,nil);
        end;

 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var tid:cardinal;
begin
ThreadHandle:=CreateThread(nil,0,@RotateThread,nil,0,tid);
end;


 
ProgRAMmer Dimonych ©   (2007-03-17 23:17) [22]

> oxffff ©   (17.03.07 23:12) [21]
Thread"ы, я надеюсь необязательно?

Вообще, без освещения куб почему не рисовался?


 
Юрий ©   (2007-03-17 23:19) [23]

> [22] ProgRAMmer Dimonych ©   (17.03.07 23:17)
> Вообще, без освещения куб почему не рисовался?

:) Интересный вопрос.


 
ProgRAMmer Dimonych ©   (2007-03-17 23:20) [24]

> Юрий ©   (17.03.07 23:19) [23]
Он-то рисовался, но не весь...


 
oxffff ©   (2007-03-17 23:21) [25]


> > oxffff ©   (17.03.07 23:12) [21]
> Thread"ы, я надеюсь необязательно?


На твое усмотрение.

>Вообще, без освещения куб почему не рисовался?

Он рисовался. Только это было должно быть пятно.
Или если поставить WIREFRAME, то сетка.
Я твой пример не смотрел.

Что касаемо создания куба через VertexBuffer и IndexBuffer пример выше.

Я разбирался по в основном по SDK. И считаю это лучшим. Хотя и книг тоже много накачал.

Даже с простеньким вершинным шейдером разобрался. Все по SDK.


 
ProgRAMmer Dimonych ©   (2007-03-17 23:23) [26]

> oxffff ©   (17.03.07 23:21) [25]
Ладно, спасибо, буду разбираться...

Жаль, хороших книг как всегда не хватает...


 
oxffff ©   (2007-03-17 23:25) [27]


> Жаль, хороших книг как всегда не хватает...


Google

DirectX 9 chm  
DirectX djvu
DirectX pdf

Пройдись по ссылкам 5 страниц. Можно столько накачать.

Но SDK не забывай.



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

Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.222 c
1-1171442668
rda
2007-02-14 11:44
2007.04.08
Сохранение вложений в Outlook


2-1174196769
Roman_S
2007-03-18 08:46
2007.04.08
сравнить текущее время с заданным DateTimePicker


2-1174254147
Norfolk
2007-03-19 00:42
2007.04.08
Кнопка в TStringGrid или TDrawGrid


15-1173709952
Prohodil Mimo
2007-03-12 17:32
2007.04.08
If ... then : Begin End VS Exit;


2-1174054611
Tru
2007-03-16 17:16
2007.04.08
Кнопки





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