XNA 4.0使用DrawUserIndexedPrimitives方法绘制一个多维数据集

时间:2013-10-18 14:31:46

标签: c# xna-4.0

修改

由于我阅读了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)
  }
);

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

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

希望这次能让自己明白

1 个答案:

答案 0 :(得分:1)

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