沿立方体表面绘制点

时间:2013-02-18 03:11:19

标签: c# 3d xna

因此,对于作业,我必须将立方体变形为球体。所需要的只是在立方体的表面上有一堆点(不需要连接或实际上在立方体上,但必须形成一个立方体,虽然连接会使它更容易看)并且有它们平滑地转化为球形。

主要问题是我从来没有学过如何在XNA 4.0中制作点数,而且从我看到它与我们在OpenGL中所做的非常不同(我们在上一课中学到了旧点)。

有人能帮我弄清楚我需要的立方体形状吗?每一边都有10x10个点,边缘上的点由该边缘的表面共享。该结构需要易于复制或修改,因为我需要具有开始状态,结束状态和中间状态来转换两个状态之间的点。

如果我遗漏任何重要信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

首先,您应该熟悉the Primitives3D sample。它说明了您需要的所有渲染API。

以下是我将如何处理此问题(您可以在MSDN上查找这些类和方法,它有望帮助您充实细节):

  1. 创建一个Vector3[]数组,代表一个适当的细分单位多维数据集(0,0)
  2. 创建第二个Vector3[]数组,并使用Vector3.Normalize复制第一个数组的顶点。这将创建一个单位球体,其顶点与原始立方体匹配。
  3. 创建一个VertexPositionColor[]数组。无论如何,请填写颜色数据。
  4. 使用Vector3.Lerp循环前两个数组,插入每个元素以设置第三个数组中的位置。这为您提供了一个可以设置动画的参数 - 您必须在每个帧中执行此操作(在Update中最好)。
  5. 创建一个索引数组(short[]),用于描述细分立方体的三角形列表(反过来,两者之间的球体和动画)。
  6. 设置BasicEffect进行渲染。这涉及设置其WorldViewProjection矩阵,并可能启用VertexColorEnabled。如果您想要照明,请参阅示例以获取详细信息(您需要使用带法线的顶点类型,并正确地为这些法线设置动画)。
  7. 使用效果进行渲染的方式是:foreach(EffectPass effectPass in effect.CurrentTechnique.Passes) { effectPass.Apply(); /* your stuff here */ }
  8. 您可以创建DynamicVertexBufferIndexBuffer并使用它们进行绘制。但对于像这样简单的事情,DrawUserIndexedPrimitives更容易(here is a recent answer with some detailshere's another one以及BasicEffect的完整示例。
  9. 请注意,您应该只在启动时创建这些对象(LoadContent是一个好地方)。在渲染过程中,您只是使用它们。

    如果您的3D渲染有问题,而且您正在绘制文字或精灵,请参阅this article了解如何修复它。

相关问题