Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. render::Mesh *Cube(render::Graphics3D *g3d, short scaleX = 1, short scaleY = 1, short scaleZ = 1)
  2.     {
  3.         //    v6----- v5
  4.         //   /|      /|
  5.         //  v1------v0|
  6.         //  | |     | |
  7.         //  | |v7---|-|v4
  8.         //  |/      |/
  9.         //  v2------v3
  10.  
  11.         short vertices[] = {1,1,1,-1,1,1,-1,-1,1,       // v0-v1-v2 front
  12.                             1,1,1,-1,-1,1,1,-1,1,       // v0-v2-v3 front
  13.                             1,1,1,1,-1,1,1,-1,-1,       // v0-v3-v4 right
  14.                             1,1,1,1,-1,-1,1,1,-1,       // v0-v4-v5 right
  15.                             1,1,1,1,1,-1,-1,1,-1,       // v0-v5-v6 top
  16.                             1,1,1,-1,1,-1,-1,1,1,       // v0-v6-v1 top
  17.                             -1,1,1,-1,1,-1,-1,-1,-1,    // v1-v6-v7 left
  18.                             -1,1,1,-1,-1,-1,-1,-1,1,    // v1-v7-v2 left
  19.                             -1,-1,-1,1,-1,-1,1,-1,1,    // v7-v4-v3 bottom
  20.                             -1,-1,-1,1,-1,1,-1,-1,1,    // v7-v3-v2 bottom
  21.                              1,-1,-1,-1,-1,-1,-1,1,-1// v4-v7-v6 back
  22.                              1,-1,-1,-1,1,-1,1,1,-1};   // v4-v6-v5 back
  23.  
  24.         short *coords = (short*)KAJAK3D_ALLOC(6*2*3*3*sizeof(short)); // 6 sivua, 2 kolmioo, 3 verteksiä, 3 shorttia each
  25.  
  26.         for(int i=0;i<6*2*3*3;i+=3) {
  27.             coords[i] = (short)(vertices[i] * scaleX);
  28.             coords[i+1] = (short)(vertices[i+1] * scaleY);
  29.             coords[i+2] = (short)(vertices[i+2] * scaleZ);
  30.         }
  31.  
  32.         unsigned short *kolmiot = (unsigned short*)KAJAK3D_ALLOC(6*2*3*sizeof(unsigned short)); // 6 sivua, 2 kolmiota per sivu, 3 kulmaa (shorttia) per kolmio
  33.  
  34.         for(int i=0; i<36; i++) {
  35.             kolmiot[i] = (unsigned short)i;
  36.         };
  37.  
  38.         // VertexArray - tässä on verteksit
  39.         core::Ref<render::VertexArray> verteksit = KAJAK3D_NEW render::VertexArray(36, 3, sizeof(short)); // 8 verteksiä, 3 komponenttia, short on komponentin koko
  40.         verteksit->set(0, 36, coords); // verteksit alken 0, pituus 36, taulukosta coords
  41.  
  42.         // IndexBuffer - tässä on kolmiot
  43.         core::Ref<render::IndexBuffer> indexBuffer = KAJAK3D_NEW render::TriangleListArray(render::StaticIndexBuffer, kolmiot, 6*2*3); // 6 sivua, 2 kolmiota per sivu, 3 kulmaa per kolmio
  44.  
  45.         // VertexBuffer - tässä on verteksit ja niiden värit
  46.         core::Ref<render::VertexBuffer> vertexBuffer = g3d->createNewVertexBuffer(render::StaticVertexBuffer);
  47.         vertexBuffer->setPositions(verteksit, 1.0f, 0); // verteksitaulukko, skaala, ??
  48.         vertexBuffer->setDefaultColor(0xFF00FF00);
  49.  
  50.         // Normaalit
  51.         core::Ref<render::VertexArray> normalsArray = render::VertexArray::generateNormals(verteksit, indexBuffer);
  52.         vertexBuffer->setNormals(normalsArray);
  53.  
  54.         // Laitetaan kaikki paska meshiin
  55.         render::Mesh *mesh = KAJAK3D_NEW render::Mesh(vertexBuffer, indexBuffer, 0);
  56.  
  57.         // Vapautetaan muistit
  58.         KAJAK3D_FREE(coords);
  59.         KAJAK3D_FREE(kolmiot);
  60.  
  61.         return mesh;
  62.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement