[1378] | 1 | #include "dxstdafx.h"
|
---|
| 2 | #include ".\box.h"
|
---|
| 3 | #include "Scene.h"
|
---|
| 4 |
|
---|
| 5 | Box::Box(void) : Object3d()
|
---|
| 6 | {
|
---|
| 7 | this->halfWidth = 2;
|
---|
| 8 | this->halfHeight = 2;
|
---|
| 9 | this->halfDepth = 2;
|
---|
| 10 |
|
---|
| 11 | LPD3DXMESH * pMesh = this->getMesh();
|
---|
| 12 | HRESULT hr = 0;
|
---|
| 13 |
|
---|
| 14 | hr = D3DXCreateMeshFVF(12, 8, D3DXMESH_MANAGED, this->FVF_Flags, DXUTGetD3DDevice(), pMesh);
|
---|
| 15 | this->nodeType |= Scene::NODE_BOX;
|
---|
| 16 | }
|
---|
| 17 |
|
---|
| 18 | Box::~Box(void)
|
---|
| 19 | {
|
---|
| 20 | }
|
---|
| 21 |
|
---|
| 22 | void Box::setDimension(float _width, float _height, float _depth)
|
---|
| 23 | {
|
---|
| 24 | this->halfWidth = _width/2;
|
---|
| 25 | this->halfHeight = _height/2;
|
---|
| 26 | this->halfDepth = _depth/2;
|
---|
| 27 |
|
---|
| 28 | LPD3DXMESH * pMesh = this->getMesh();
|
---|
| 29 |
|
---|
| 30 | Vertex* pVertices;
|
---|
| 31 |
|
---|
| 32 | //lock vertex buffer
|
---|
| 33 | (*pMesh)->LockVertexBuffer( 0, (void**)&pVertices );
|
---|
| 34 |
|
---|
| 35 | pVertices[0] = Vertex(-this->halfWidth, -this->halfHeight, this->halfDepth);
|
---|
| 36 | pVertices[1] = Vertex(-this->halfWidth, -this->halfHeight, -this->halfDepth);
|
---|
| 37 | pVertices[2] = Vertex(this->halfWidth, -this->halfHeight, -this->halfDepth);
|
---|
| 38 | pVertices[3] = Vertex(this->halfWidth, -this->halfHeight, this->halfDepth);
|
---|
| 39 | pVertices[4] = Vertex(-this->halfWidth, this->halfHeight, this->halfDepth);
|
---|
| 40 | pVertices[5] = Vertex(-this->halfWidth, this->halfHeight, -this->halfDepth);
|
---|
| 41 | pVertices[6] = Vertex(this->halfWidth, this->halfHeight, -this->halfDepth);
|
---|
| 42 | pVertices[7] = Vertex(this->halfWidth, this->halfHeight, this->halfDepth);
|
---|
| 43 |
|
---|
| 44 | //unlock vertex buffer
|
---|
| 45 | (*pMesh)->UnlockVertexBuffer();
|
---|
| 46 |
|
---|
| 47 | // fill the indices:
|
---|
| 48 | WORD* pIndices = NULL;
|
---|
| 49 | (*pMesh)->LockIndexBuffer( 0, (void**)&pIndices );
|
---|
| 50 |
|
---|
| 51 | pIndices[0] = (WORD) 0; pIndices[2] = (WORD) 2; pIndices[1] = (WORD) 1;
|
---|
| 52 | pIndices[3] = (WORD) 0; pIndices[5] = (WORD) 3; pIndices[4] = (WORD) 2;
|
---|
| 53 | pIndices[6] = (WORD) 4; pIndices[8] = (WORD) 5; pIndices[7] = (WORD) 6;
|
---|
| 54 | pIndices[9] = (WORD) 4; pIndices[11] = (WORD) 6; pIndices[10] = (WORD) 7;
|
---|
| 55 | pIndices[12] = (WORD) 1; pIndices[14] = (WORD) 6; pIndices[13] = (WORD) 5;
|
---|
| 56 | pIndices[15] = (WORD) 1; pIndices[17] = (WORD) 2; pIndices[16] = (WORD) 6;
|
---|
| 57 | pIndices[18] = (WORD) 0; pIndices[20] = (WORD) 4; pIndices[19] = (WORD) 7;
|
---|
| 58 | pIndices[21] = (WORD) 0; pIndices[23] = (WORD) 7; pIndices[22] = (WORD) 3;
|
---|
| 59 | pIndices[24] = (WORD) 0; pIndices[26] = (WORD) 1; pIndices[25] = (WORD) 4;
|
---|
| 60 | pIndices[27] = (WORD) 5; pIndices[29] = (WORD) 4; pIndices[28] = (WORD) 1;
|
---|
| 61 | pIndices[30] = (WORD) 7; pIndices[32] = (WORD) 2; pIndices[31] = (WORD) 3;
|
---|
| 62 | pIndices[33] = (WORD) 7; pIndices[35] = (WORD) 6; pIndices[34] = (WORD) 2;
|
---|
| 63 |
|
---|
| 64 | (*pMesh)->UnlockIndexBuffer();
|
---|
| 65 |
|
---|
| 66 | // model creation finished, set value to true
|
---|
| 67 | this->setModelLoaded(true);
|
---|
| 68 |
|
---|
| 69 |
|
---|
| 70 | }
|
---|
| 71 |
|
---|
| 72 | void Box::generatePhysicMesh(int type)
|
---|
| 73 | {
|
---|
| 74 | this->shapeType = type;
|
---|
| 75 | boxDesc.dimensions.set(this->halfWidth,this->halfHeight, this->halfDepth);
|
---|
| 76 | this->pActorDesc.shapes.pushBack(&boxDesc);
|
---|
| 77 | } |
---|