1

所以对于一个任务,我必须把一个立方体变成一个球体。所需要的只是沿着立方体的表面有一堆点(不需要连接或实际上在立方体上,但必须形成一个立方体,尽管连接会更容易查看)并且有它们平滑地转化为球形。

主要问题是我从未学习过如何在 XNA 4.0 中提出观点,而且据我所见,它与我们在 OpenGL 中所做的非常不同(我们在上一堂课中学习了旧的)。

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

如果我遗漏了任何可能重要的内容,请告诉我。

4

1 回答 1

0

首先,您应该熟悉Primitives3D 示例。它说明了您需要的所有呈现 API。

以下是我解决这个问题的方法(你可以在 MSDN 上查找这些类和方法,希望能帮助你充实细节):

  1. Vector3[]创建一个表示围绕 (0,0) 的适当细分的单位立方体的数组
  2. 创建第二个数组,Vector3[]并用于Vector3.Normalize从第一个数组复制顶点。这将创建一个单位球体,其顶点与原始立方体匹配。
  3. 创建一个数组VertexPositionColor[]。随意填写颜色数据。
  4. 用于Vector3.Lerp循环前两个数组,插入每个元素以设置第三个数组中的位置。这为您提供了一个可以设置动画的参数 - 您必须在每一帧都执行此操作(Update可能是最好的)。
  5. 创建一个索引数组 ( short[]),描述镶嵌立方体的三角形列表(以及两者之间的球体和动画)。
  6. 设置一个BasicEffect进行渲染。这涉及设置它的World,ViewProjection矩阵,也许还可以打开VertexColorEnabled。如果您想要照明,请参阅示例了解详细信息(您需要使用带有法线的顶点类型,并正确地为这些法线设置动画)。
  7. 使用效果渲染的方式是:foreach(EffectPass effectPass in effect.CurrentTechnique.Passes) { effectPass.Apply(); /* your stuff here */ }
  8. 你可以创建一个DynamicVertexBufferIndexBuffer用它们绘制。但是对于像这样简单的事情,DrawUserIndexedPrimitives要容易得多(这是最近的答案,其中包含一些细节这是另一个带有完整示例的答案BasicEffect)。

请注意,您应该只在启动时创建这些对象(这LoadContent是一个好地方)。在渲染过程中,您只是在使用它们。

如果您的 3D 渲染有问题,并且您正在绘制文本或精灵,请参阅这篇文章以了解如何修复它。

于 2013-02-18T13:28:21.500 回答