2013-06-26 39 views
1

我試圖創建兩個指數和頂點的立方體。我能夠畫出他們,但他們看起來有點奇怪。古怪的立方體形狀

enter image description here

這裏是我的代碼。它是與任何頂點或指數,但我不知道其中:

public void Draw(BasicEffect effect) 
{ 
    foreach (EffectPass pass in effect.CurrentTechnique.Passes) 
    { 
     pass.Apply(); 
     device.SetVertexBuffer(cubeVertexBuffer); 
     device.Indices = iBuffer; 
     device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 8, 0, 12); 
    } 
} 

private void SetUpIndices() 
{ 
    indices = new short[36]; 

    indices[0] = 0; 
    indices[1] = 3; 
    indices[2] = 2; 

    indices[3] = 2; 
    indices[4] = 1; 
    indices[5] = 0; 

    indices[6] = 4; 
    indices[7] = 7; 
    indices[8] = 6; 

    indices[9] = 6; 
    indices[10] = 5; 
    indices[11] = 4; 

    indices[12] = 1; 
    indices[13] = 2; 
    indices[14] = 6; 

    indices[15] = 6; 
    indices[16] = 5; 
    indices[17] = 1; 

    indices[18] = 4; 
    indices[19] = 7; 
    indices[20] = 3; 

    indices[21] = 3; 
    indices[22] = 0; 
    indices[23] = 4; 

    indices[24] = 4; 
    indices[25] = 0; 
    indices[26] = 1; 

    indices[27] = 1; 
    indices[28] = 5; 
    indices[29] = 4; 

    indices[30] = 3; 
    indices[31] = 7; 
    indices[32] = 6; 

    indices[33] = 6; 
    indices[34] = 2; 
    indices[35] = 3; 

    iBuffer = new IndexBuffer(device, typeof(short), 36, BufferUsage.WriteOnly); 
    iBuffer.SetData(indices); 
} 

private void SetUpVertices() 
{ 
    vertices = new VertexPositionColor[8]; 


    vertices[0] = new VertexPositionColor(new Vector3(0, 0, 0), color); 
    vertices[1] = new VertexPositionColor(new Vector3(0, 1, 0), color); 
    vertices[2] = new VertexPositionColor(new Vector3(1, 1, 0), color); 
    vertices[3] = new VertexPositionColor(new Vector3(1, 0, 0), color); 
    vertices[4] = new VertexPositionColor(new Vector3(0, 0, -1), color); 
    vertices[5] = new VertexPositionColor(new Vector3(0, 1, -1), color); 
    vertices[6] = new VertexPositionColor(new Vector3(1, 1, -1), color); 
    vertices[7] = new VertexPositionColor(new Vector3(1, 0, -1), color); 

    cubeVertexBuffer = new VertexBuffer(device, typeof(VertexPositionColor), 8, BufferUsage.WriteOnly); 
    cubeVertexBuffer.SetData<VertexPositionColor>(vertices); 
} 
+0

感謝您編輯帖子。我想不起來 –

回答

1

我可以做一個胡亂猜測,說是因爲在你的指數頂點的順序弄亂了(我會打電話給他們三角形)。

通常在3D引擎,你必須建立頂點的順序三角形所以他們都被命令一樣的 - 即順時針或逆時針 - 當你從形狀,它們形成的外看着他們。 數學上講,你的形狀中的所有三角形的法線應該指向形狀的內部或外部。法線的方向告訴3D引擎何時繪製三角形 - 如果引擎只在一側繪製三角形,則引擎可以減少兩倍的工作量 - 99,99%的實體對象的內部不會被用戶看到。

在你的情況看指數032和476 - 他們應該是032/467或023/476。等等。

+0

謝謝。我的計劃是最終只畫出一些看似每個立方體的兩側,但我需要真正得到立方體形狀正常工作第一笑 –

+0

哦,多維數據集也將有一個單一的質地太。當發生這種情況時,我需要更多的價值 –

+0

看着你提供的圖片我認爲XNA已經只繪製了立方體的可見面。它通常是一種默認行爲。 – athabaska