2013-02-18 81 views
1

因此,对于任务我必须将立方体变形为球体。所需要做的就是在立方体的表面上放置一堆点(不需要连接或实际位于立方体上,但必须形成一个立方体,尽管连接会让它更容易看),并且具有他们平滑地转化成球体形状。沿立方体表面绘制点

主要问题是我从来没有学会如何在XNA 4.0中创造点,并且从我所看到的与我们在OpenGL中做的非常不同(我们在前一课中学到了旧的)。

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

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

回答

0

首先,您应该熟悉the Primitives3D sample。它演示了您需要的所有渲染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要容易得多(here is a recent answer with some detailshere's another one,完整示例为BasicEffect)。

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

如果您在3D渲染时遇到问题,并且正在绘制文本或精灵,请参阅this article以了解如何解决此问题。