2013-06-26 41 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