从8点立方体生成垂直法线

时间:2013-07-03 17:48:50

标签: 3d directx shader cube normals

我觉得我现在真的很蠢,但我似乎无法想到一个非常好的方法来做到这一点:

基本上我在DirectX中创建了一堆立方体,并使用VertexPositionColor来存储数据。为了有效地存储立方体,我只是每个立方体存储8个点。但事情是,我希望每个面的法线指向远离,使得正面的法线类似于(0,0,1),而背面的法线是(0,0,-1)。

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

我有什么想法可以做到这一点?最好是在着色器中还是有效的?

由于

2 个答案:

答案 0 :(得分:0)

你可以使用indecies来保存一些内存,每边可以是8x4浮点数+4 * 6英寸,这将是56 * 4字节而不是96 * 4字节,但这是你能做的全部,除非一些多维数据集之间共享点。

答案 1 :(得分:0)

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

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

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

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