沿着立方体的表面绘制点
本文关键字:绘制 表面 立方体 | 更新日期: 2023-09-27 17:59:44
因此,对于赋值,我必须将立方体变形为球体。所需要的只是沿着立方体的表面有一堆点(不需要连接或实际位于立方体上,但必须形成立方体,尽管连接会使观察更容易),并使它们平滑地转化为球形。
主要的问题是,我从未学会如何在XNA 4.0中创建点,从我所看到的情况来看,它与我们在OpenGL中所做的非常不同(我们在上一节课中学习了旧的)。
有人能帮我做出我需要的立方体形状吗?每一边都有10x10个点,边上的点由该边的表面共享。该结构需要易于复制或修改,因为我需要有开始状态、结束状态和中间状态来转换两个状态之间的点。
如果我遗漏了任何可能重要的事情,请告诉我。
首先,您应该熟悉Primitives3D示例。它说明了您需要的所有呈现API。
以下是我处理这个问题的方法(你可以在MSDN上查找这些类和方法,希望它能帮助你充实细节):
- 创建一个
Vector3[]
数组,该数组表示(0,0)周围的适当镶嵌单位立方体 - 创建第二个
Vector3[]
数组,然后使用Vector3.Normalize
从第一个数组中复制顶点。这将创建一个顶点与原始立方体匹配的单位球体 - 创建一个
VertexPositionColor[]
数组。随意填写颜色数据 - 使用
Vector3.Lerp
循环遍历前两个数组,对每个元素进行插值以设置第三个数组中的位置。这给了你一个可以设置动画的参数——你必须在每一帧中都这样做(在Update
中可能是最好的) - 创建一个索引数组(
short[]
),用于描述镶嵌立方体的三角形列表(以及球体和两者之间的动画) - 设置用于渲染的
BasicEffect
。这包括设置其World
、View
和Projection
矩阵,并可能打开VertexColorEnabled
。如果需要照明,请参见示例以获取详细信息(需要使用具有法线的顶点类型,并正确设置这些法线的动画) - 渲染效果的方法是:
foreach(EffectPass effectPass in effect.CurrentTechnique.Passes) { effectPass.Apply(); /* your stuff here */ }
- 您可以创建一个
DynamicVertexBuffer
和IndexBuffer
并使用它们进行绘制。但对于像这样简单的东西,DrawUserIndexedPrimitives
要容易得多(这是最近的一个答案,其中有一些细节,还有另一个BasicEffect
的完整示例)
请注意,您应该只在启动时创建这些对象(LoadContent
是一个好地方)。在渲染过程中,您只需使用它们。
如果您的3D渲染有问题,并且您正在绘制文本或精灵,请参阅本文了解如何修复它。