1

编辑

由于我阅读了 Mark H 的建议(非常感谢,我发现它非常有用),我认为我的问题可以通过这种方式变得更加清晰:

使用 XNA 4.0,我正在尝试绘制一个立方体。

我使用这种方法:

GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(
    PrimitiveType.LineList,
    primitiveList,
    0,  // vertex buffer offset to add to each element of the index buffer
    8,  // number of vertices in pointList
    lineListIndices,  // the index buffer
    0,  // first index element to read
    7   // number of primitives to draw
);

我从这个页面得到了代码示例,它简单地绘制了一系列三角形。我想修改此代码以绘制立方体。我能够轻轻地移动相机,这样我就可以感知到坚固性,我将顶点数组设置为包含定义立方体的 8 个点。但我无法完全理解我必须为每个PrimitiveType.

所以,我无法绘制立方体(只是一些未定义顺序的边缘)。

更详细:

建立顶点索引列表,使用的样本

// Initialize an array of indices of type short.
lineListIndices = new short[(points * 2) - 2];

// Populate the array with references to indices in the vertex buffer
for (int i = 0; i < points - 1; i++)
{
    lineListIndices[i * 2] = (short)(i);
    lineListIndices[(i * 2) + 1] = (short)(i + 1);
}

我很惭愧地说我不能在立方体的情况下做同样的事情。

  • 的大小必须是lineListIndices多少?
  • 我应该如何填充它?按什么顺序?

当我使用不同的 时,这些东西会如何变化PrimitiveType

在代码示例中,还有另外几个我无法完全理解的调用,它们是:

// Initialize the vertex buffer, allocating memory for each vertex.
vertexBuffer = new VertexBuffer(graphics.GraphicsDevice, vertexDeclaration,
points, BufferUsage.None);

// Set the vertex buffer data to the array of vertices.
vertexBuffer.SetData<VertexPositionColor>(pointList);

vertexDeclaration = new VertexDeclaration(new VertexElement[]
  {
    new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),
    new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0)
  }
);

也就是说,对于VertexBufferVertexDeclaration我找不到和显着(猴子般)的指南。我也报告了他们,因为我认为他们可能参与理解事物。

我想我还必须了解与顶点存储在数组中的顺序相关的内容。但实际上我不知道我应该学习什么来让这个函数绘制一个立方体。因此,如果有人能指出我正确的方向,将不胜感激。

希望这次能把自己说清楚

4

1 回答 1

2

最终,我找到了一个有价值的指南来绘制一个立方体。在那里他们使用DrawUserPrimitive<T>方法,但差异很小。我使用这两种方法都没有困难。正如您将看到的,本指南包含有关绘制立方体的每个问题的说明,例如必须存储然后绘制顶点的顺序,以及传递绘图方法的图元数量。希望这对像我这样正在努力解决这个问题的人有所帮助。

于 2013-10-25T07:43:53.157 回答