Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

В очередной раз попытался научиться 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.034 c
15-1173962896
roman_ln
2007-03-15 15:48
2007.04.08
Закрыть форму в Visual Basic


2-1174254174
uranius
2007-03-19 00:42
2007.04.08
как грамотно отправить xml запрос по http ?


6-1161340096
YurikGL
2006-10-20 14:28
2007.04.08
Соединение сам с собой через две сетевых карты.


15-1173127854
Petr V. Abramov
2007-03-05 23:50
2007.04.08
"Марш несогласных"


2-1173983823
bagos
2007-03-15 21:37
2007.04.08
stringgrid и listbox