#include "dxstdafx.h" #include "Cube.h" #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1) struct Vertex { float x, y, z; float nx, ny, nz; float tu, tv; }; Cube::Cube(IDirect3DDevice9* pd3dDevice) { this->pd3dDevice = pd3dDevice; //pVertexBuffer int vertexCnt = 24; float s = 1; // igazából mindegy a méret, mert csak a kocka skálázódik vele Vertex g_quadVertices[] = { // 1 lap = 2 háromszögből álló triangle_strip // lapok körüljárási irányának megváltoztatása: a középső 2 vertex felcserélésével //x y z normal texcoord {-s, s, s, 0,0,-1, 0,0 }, {-s,-s, s, 0,0,-1, 0,1 }, { s, s, s, 0,0,-1, 1,0 }, { s,-s, s, 0,0,-1, 1,1 }, // z érték -1-szeres + 2. és 3. vertex cseréje {-s, s, -s, 0,0,1, 0,0 }, { s, s, -s, 0,0,1, 1,0 }, {-s,-s, -s, 0,0,1, 0,1 }, { s,-s, -s, 0,0,1, 1,1 }, // y,z csere {-s,-s, s, 0,1,0, 0,0 }, {-s,-s, -s, 0,1,0, 0,1 }, { s,-s, s, 0,1,0, 1,0 }, { s,-s, -s, 0,1,0, 1,1 }, {-s, s, s, 0,-1,0, 0,0 }, { s, s, s, 0,-1,0, 1,0 }, {-s, s,-s, 0,-1,0, 0,1 }, { s, s,-s, 0,-1,0, 1,1 }, // x,z csere {-s, s,-s, 1,0,0, 0,0 }, {-s,-s,-s, 1,0,0, 0,1 }, {-s, s, s, 1,0,0, 1,0 }, {-s,-s, s, 1,0,0, 1,1 }, { s, s, -s, -1,0,0, 0,0 }, { s, s, s, -1,0,0, 1,0 }, { s,-s, -s, -1,0,0, 0,1 }, { s,-s, s, -1,0,0, 1,1 }, }; pd3dDevice->CreateVertexBuffer( vertexCnt*sizeof(Vertex), D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &pVertexBuffer, NULL ); void *pVertices = NULL; pVertexBuffer->Lock( 0, sizeof(g_quadVertices), (void**)&pVertices, 0 ); memcpy( pVertices, g_quadVertices, sizeof(g_quadVertices) ); pVertexBuffer->Unlock(); } void Cube::Destroy() { SAFE_RELEASE( pVertexBuffer ); } void Cube::PrepareDrawing() { pd3dDevice->SetStreamSource( 0, pVertexBuffer, 0, sizeof(Vertex) ); pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); } void Cube::DrawFace(int index) { pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 4*index, 2 ); // startVertex, primitiveCnt } void Cube::Draw() { for (int index = 0; index < 6; index++) pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 4*index, 2 ); // startVertex, primitiveCnt }