修改
由于我阅读了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
);
我从this page获得了代码示例,它只是绘制了一系列三角形。
我想修改此代码以绘制多维数据集。我能够快速移动相机,这样我才能拥有坚固的感觉,我设置顶点数组以包含定义立方体的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
,我找不到重要的(猴子般的)指南。我也报告了他们,因为我认为他们可以参与理解事物。
我想我还必须了解与顶点存储在数组中的顺序有关的内容。但实际上我不知道应该学习如何使用此函数绘制一个立方体。所以,如果有人能指出我正确的方向,我们将不胜感激。
希望这次能让自己明白
答案 0 :(得分:1)
最终我找到了一个有价值的guide来绘制一个立方体。在那里他们使用DrawUserPrimitive<T>
方法但差别很小。我没有遇到使用这两种方法的困难。正如您将看到的,本指南包括对绘制立方体的每个问题的解释,例如必须存储然后绘制的顶点顺序,以及传递绘图方法的基元数量。
希望这对任何能够解决这个问题的人都有所帮助,比如我。