Текущий архив: 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]
> Жаль, хороших книг как всегда не хватает...
DirectX 9 chm
DirectX djvu
DirectX pdf
Пройдись по ссылкам 5 страниц. Можно столько накачать.
Но SDK не забывай.
Страницы: 1 вся ветка
Текущий архив: 2007.04.08;
Скачать: CL | DM;
Память: 0.55 MB
Время: 0.032 c