编辑
由于我阅读了 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)
}
);
也就是说,对于VertexBuffer
和VertexDeclaration
我找不到和显着(猴子般)的指南。我也报告了他们,因为我认为他们可能参与理解事物。
我想我还必须了解与顶点存储在数组中的顺序相关的内容。但实际上我不知道我应该学习什么来让这个函数绘制一个立方体。因此,如果有人能指出我正确的方向,将不胜感激。
希望这次能把自己说清楚