【问题标题】:generating perpendicular normals from 8-point cube从 8 点立方体生成垂直法线
【发布时间】:2013-07-01 13:12:57
【问题描述】:

我觉得我现在真的很笨,但我似乎想不出一个很好的方法来做到这一点:

基本上,我在 DirectX 中创建大量立方体并使用 VertexPositionColor 来存储数据。为了有效地存储立方体,我每个立方体只存储 8 个点。但问题是,我希望每张脸的法线指向外面,这样正面的法线类似于 (0, 0, 1),背面的法线是 (0, 0, -1)。

我的问题是如何仅从 8 点立方体有效地做到这一点。我知道我可以使用 24 点立方体表示轻松地做到这一点,但从内存的角度来看,这似乎效率低下。

有什么想法可以做到这一点吗?最好在着色器中或其他有效的东西中?

谢谢

【问题讨论】:

    标签: 3d directx shader cube normals


    【解决方案1】:

    您可以使用 indecies 来节省一些内存,这将是每边 8x4 浮点数 + 4*6 整数,这将是 56*4 字节而不是 96*4 字节,但这就是您所能做的,除非有些点在立方体之间共享。

    【讨论】:

      【解决方案2】:

      对于着色器模型 3 或更少,您必须复制顶点,除非每个顶点的 3 条法线过度老化是可以的。

      在着色器模型 3+ 中,您可以将索引缓冲区暴露给着色器并使用 SV_VertexID 从顶点/外壳着色器中的 3 个顶点计算法线,但您无法将其发送到下一个阶段,因为您总是输出 8 个顶点。

      在几何/域着色器中,您可以看到可以计算法线的三角形。

      复制立方体顶点是可以的,因为您要创建大量立方体,请使用几何实例化

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        相关资源
        最近更新 更多