1

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

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

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

任何想法我怎么能做到这一点?最好在着色器中或有效的东西中?

谢谢

4

2 回答 2

0

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

于 2013-07-03T21:51:25.723 回答
0

使用着色器模型 3 或更少,您必须复制顶点,除非可以在每个顶点处过度使用 3 条法线。

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

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

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

于 2013-07-04T02:39:36.227 回答