2014-03-31 16 views
-1

我想用irrlicht自己生成多維數據集。我有一個二維地圖,每個立方體應該代表一個牆磚。我想要將所有這些立方體放在一個網格中。這是一個測試,應該畫我10 * 1 * 10立方體:Irrlicht自定義多維數據集瓦片

f32 cubeSize = 5.0f; 
video::SColor cubeColour(255,255,255,255); 
SMeshBuffer * buffer = new SMeshBuffer(); 

u16 u[36] = { 0,2,1, 0,3,2, 1,5,4, 1,2,5, 4,6,7, 4,5,6, 
7,3,0, 7,6,3, 9,5,2, 9,8,5, 0,11,10, 0,10,7}; 

int vertcount  = 0; 
int indicescount = 0; 

for (int x = 0; x < 10; x ++){ 
    for (int y = 0; y < 10; y ++){ 
     buffer->Vertices.set_used(vertcount + 12); 
     buffer->Vertices[vertcount++] = video::S3DVertex(0,0,0, -1,-1,-1, cubeColour, 0, 1); 
     buffer->Vertices[vertcount++] = video::S3DVertex(1,0,0, 1,-1,-1, cubeColour, 1, 1); 
     buffer->Vertices[vertcount++] = video::S3DVertex(1,1,0, 1, 1,-1, cubeColour, 1, 0); 
     buffer->Vertices[vertcount++] = video::S3DVertex(0,1,0, -1, 1,-1, cubeColour, 0, 0); 
     buffer->Vertices[vertcount++] = video::S3DVertex(1,0,1, 1,-1, 1, cubeColour, 0, 1); 
     buffer->Vertices[vertcount++] = video::S3DVertex(1,1,1, 1, 1, 1, cubeColour, 0, 0); 
     buffer->Vertices[vertcount++] = video::S3DVertex(0,1,1, -1, 1, 1, cubeColour, 1, 0); 
     buffer->Vertices[vertcount++] = video::S3DVertex(0,0,1, -1,-1, 1, cubeColour, 1, 1); 
     buffer->Vertices[vertcount++] = video::S3DVertex(0,1,1, -1, 1, 1, cubeColour, 0, 1); 
     buffer->Vertices[vertcount++] = video::S3DVertex(0,1,0, -1, 1,-1, cubeColour, 1, 1); 
     buffer->Vertices[vertcount++] = video::S3DVertex(1,0,1, 1,-1, 1, cubeColour, 1, 0); 
     buffer->Vertices[vertcount++] = video::S3DVertex(1,0,0, 1,-1,-1, cubeColour, 0, 0); 

     //buffer->BoundingBox.reset(0,0,0); 

     for (int i = vertcount - 12; i < vertcount; ++i) { 
      buffer->Vertices[i].Pos -= vector3df(0.5f, 0.5f, 0.5f); 
      buffer->Vertices[i].Pos *= cubeSize; 
      buffer->Vertices[i].Pos += vector3df(x * cubeSize, 0, y * cubeSize); 
     // buffer->BoundingBox.addInternalPoint(buffer->Vertices[i].Pos); 
     } 

     indicescount += 36; 
     buffer->Indices.set_used(indicescount); 
     for (s32 i = indicescount - 36; i < indicescount; i+=3) { 
      buffer->Indices[i]  = u[(i)  % 36] += x * cubeSize; 
      buffer->Indices[i + 1] = u[(i + 1) % 36] = 0; //cubeSize; 
      buffer->Indices[i + 2] = u[(i + 2) % 36] += y * cubeSize; 
     } 

    } 
} 

SMesh * cubeMesh = new SMesh(); 
cubeMesh->addMeshBuffer(buffer); 
ISceneNode * cubeSceneNode = smgr->addMeshSceneNode(cubeMesh); 
cubeSceneNode->setMaterialFlag(EMF_LIGHTING, false); 

但這一切都搞砸了。我不知道用於「指數」,這可能是主要問題。所以,是的,如何做到這一點?如果有人知道如何使正常人正常以及有關它把2層的質地準備,告訴我:)

回答

-1

你好,請用它來代替您manula立方體

smgr->addCubeSceneNode(50);

只要按照教程在Irrlicht網站上。

+0

這是我第一次做的。但是這樣我得到了錯誤的閃電:/這是一個屏幕:[鏈接](http://s14.directupload.net/images/140328/2qyiamvm.png),我用一個節點,它會變得更快,因爲我tryed meshcombiner類,這是一個很好的加速(但這並沒有解決燈光,只支持一個紋理通道)。 – user3458589

+0

嗨對不起,我沒有回來給你,但我正忙着工作,現在我無法查看你的圖像鏈接,因爲它正在標記爲'色情'!?所以如果你能提供替代形象,它會給我一些想法。也許你應該看看已經存在的着色器? – XAMlMAX