沿着立方体的表面绘制点

本文关键字:绘制 表面 立方体 | 更新日期: 2023-09-27 17:59:44

因此,对于赋值,我必须将立方体变形为球体。所需要的只是沿着立方体的表面有一堆点(不需要连接或实际位于立方体上,但必须形成立方体,尽管连接会使观察更容易),并使它们平滑地转化为球形。

主要的问题是,我从未学会如何在XNA 4.0中创建点,从我所看到的情况来看,它与我们在OpenGL中所做的非常不同(我们在上一节课中学习了旧的)。

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

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

沿着立方体的表面绘制点

首先,您应该熟悉Primitives3D示例。它说明了您需要的所有呈现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要容易得多(这是最近的一个答案,其中有一些细节,还有另一个BasicEffect的完整示例)

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

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