【问题标题】:Draw points along the surface of a cube沿立方体表面绘制点
【发布时间】:2013-02-18 03:11:18
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# 3d xna


    【解决方案1】:

    首先,您应该熟悉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 的完整示例)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2017-02-05
      • 2012-12-07
      相关资源
      最近更新 更多