Шустрый

Профиль
Группа: Участник
Сообщений: 69
Регистрация: 20.5.2007
Репутация: нет Всего: нет
|
Для создания буффера вершин куба я использую следуйщее: | Код | function TMainForm.PrepareVertices: HResult; const Vertices: array[0..7] of TCustomVertex = ( (x: -1; y: 1; z: -1; color: $000000FF), (x: 1; y: 1; z: -1; color: $000000FF), (x: 1; y: -1; z: -1; color: $000000FF), (x: -1; y: -1; z: -1; color: $000000FF), (x: -1; y: 1; z: 1; color: $000000FF), (x: 1; y: 1; z: 1; color: $000000FF), (x: 1; y: -1; z: 1; color: $000000FF), (x: -1; y: -1; z: 1; color: $000000FF) ); Indexes: array[0..35] of WORD = ( 0,1,2,2,3,0, 4,5,6,6,7,4, 0,4,5,5,1,0, 3,7,6,6,2,3, 0,4,7,7,3,0, 1,5,6,6,2,1 ); var pVertices: pointer; begin Result := FD3DDevice.CreateVertexBuffer(SizeOf(Vertices), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, FD3DVertexBuffer, NIL); if FAILED(Result) then EXIT; Result := FD3DVertexBuffer.Lock(0, SizeOf(Vertices), pVertices, 0); if FAILED(Result) then EXIT; try CopyMemory(pVertices, @Vertices, SizeOf(Vertices)); finally FD3DVertexBuffer.Unlock; end; Result := FD3DDevice.CreateIndexBuffer(SizeOf(Indexes), D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, FD3DIndexBuffer, NIL); if FAILED(Result) then EXIT; Result := FD3DIndexBuffer.Lock(0, SizeOf(Indexes), pVertices, 0); if FAILED(Result) then EXIT; try CopyMemory(pVertices, @Indexes, SizeOf(Indexes)); finally FD3DIndexBuffer.Unlock; end; end;
|
При прорисовке куб выводится, но как будто перестает работать z-буфер. В примере из книги буфер задавался так: | Код | Vertices: array[0..23] of TCustomVertex = ( (x: -1; y: 1; z: -1; color: $000000FF), (x: 1; y: 1; z: -1; color: $000000FF), (x: 1; y: -1; z: -1; color: $000000FF), (x: -1; y: -1; z: -1; color: $000000FF),
(x: -1; y: 1; z: 1; color: $00F00FF0), (x: -1; y: 1; z: -1; color: $00F00FF0), (x: -1; y: -1; z: -1; color: $00F00FF0), (x: -1; y: -1; z: 1; color: $00F00FF0),
(x: 1; y: 1; z: 1; color: $0000FF00), (x: -1; y: 1; z: 1; color: $0000FF00), (x: -1; y: -1; z: 1; color: $0000FF00), (x: 1; y: -1; z: 1; color: $0000FF00),
(x: 1; y: 1; z: -1; color: $000FF000), (x: 1; y: 1; z: 1; color: $000FF000), (x: 1; y: -1; z: 1; color: $000FF000), (x: 1; y: -1; z: -1; color: $000FF000),
(x: -1; y: 1; z: 1; color: $00FF0000), (x: 1; y: 1; z: 1; color: $00FF0000), (x: 1; y: 1; z: -1; color: $00FF0000), (x: -1; y: 1; z: -1; color: $00FF0000),
(x: 1; y: -1; z: -1; color: $00FFFFFF), (x: 1; y: -1; z: 1; color: $00FFFFFF), (x: -1; y: -1; z: 1; color: $00FFFFFF), (x: -1; y: -1; z: -1; color: $00FFFFFF) ); Indexes: array[0..35] of WORD = ( 0, 1, 2, 2, 3, 0, 4, 5, 6, 6, 7, 4, 8, 9, 10, 10, 11, 8, 12, 13, 14, 14, 15, 12, 16, 17, 18, 18, 19, 16, 20, 21, 22, 22, 23, 20 );
|
дальше также, и все работает как надо! Но мне сильно не нравитсь, что каждая точка описывается трижды. Подскажите, что мне делать
|