作为学习经验,我正在编写一个即时模式管理的 DirectX 9 应用程序。
我正在手动计算场景中所有三角形的顶点法线,以实现平滑的 Gouraud 着色。
这按预期工作,但我猜这不是最有效的方法。是否可以让 GPU 为我执行此操作?
理论上,您可以在顶点着色器内生成顶点法线。这涉及到每次使用该着色器渲染网格时的计算,所以为什么不提前生成它们。
如果您的意思是要在渲染之前生成它们,但使用 GPU 而不是 CPU,我会说不值得费心加速您只要做一次的事情。此外,我不确定 DX9 是否有办法从着色器中获取计算出的顶点信息(DX10 可以)。
总而言之,在大多数情况下最好的做法是传统的:在保存包含网格的数据文件的程序中计算顶点法线 - 作为预计算步骤来执行。通常,如果网格来自 Max 或 Maya 等 3d 软件包,您就会拥有它们,因为法线中有艺术信息,除非您知道整个网格应该是完全平滑(或多面)的,否则在一般情况下它是不可计算的.