DirectX中顶点法线的计算

DirectX中顶点法线的计算,directx,gpu,normals,Directx,Gpu,Normals,作为学习经验,我正在编写一个即时模式管理的DirectX 9应用程序 我正在手动计算场景中所有三角形的顶点法线,以允许平滑的Gouraud着色 这正如预期的那样有效,但我猜这不是最有效的方法。是否可以让GPU为我执行此操作?检查并。检查并。理论上,您可以在顶点着色器内生成顶点法线。这涉及到每次使用该着色器渲染网格时的计算,所以为什么不提前生成它们呢 如果你想在渲染之前生成它们,但是使用GPU而不是CPU,我想说的是,你不值得费心去加速你只需要做一次的事情。此外,我不确定DX9是否有办法从着色器获

作为学习经验,我正在编写一个即时模式管理的DirectX 9应用程序

我正在手动计算场景中所有三角形的顶点法线,以允许平滑的Gouraud着色


这正如预期的那样有效,但我猜这不是最有效的方法。是否可以让GPU为我执行此操作?

检查并。

检查并。

理论上,您可以在顶点着色器内生成顶点法线。这涉及到每次使用该着色器渲染网格时的计算,所以为什么不提前生成它们呢

如果你想在渲染之前生成它们,但是使用GPU而不是CPU,我想说的是,你不值得费心去加速你只需要做一次的事情。此外,我不确定DX9是否有办法从着色器获取计算的顶点信息(DX10有)


总而言之,在大多数情况下,最好的做法是传统的:在保存包含网格的数据文件的程序中计算顶点法线-作为预计算步骤进行。如果网格来自3d软件包(如Max或Maya),则通常会使用它们,因为法线中包含艺术信息,除非您知道整个网格应该是完全平滑的(或面状),否则在一般情况下,它是不可计算的。

理论上,您可以在顶点着色器中生成顶点法线。这涉及到每次使用该着色器渲染网格时的计算,所以为什么不提前生成它们呢

如果你想在渲染之前生成它们,但是使用GPU而不是CPU,我想说的是,你不值得费心去加速你只需要做一次的事情。此外,我不确定DX9是否有办法从着色器获取计算的顶点信息(DX10有)


总而言之,在大多数情况下,最好的做法是传统的:在保存包含网格的数据文件的程序中计算顶点法线-作为预计算步骤进行。通常,如果网格来自3d软件包(如Max或Maya),则会使用它们,因为法线中包含艺术信息,除非您知道整个网格应该是完全平滑的(或面状),否则在一般情况下,它是不可计算的。

请注意,这些功能不会将工作卸载到GPU,它们只是基于CPU的辅助函数。某些D3DX函数由于某些原因速度非常慢。请注意,这些函数不会将工作转移到GPU,它们只是基于CPU的辅助函数。某些D3DX函数由于某些原因速度非常慢。可能Ash所做的与渲染静态对象不同。如果每帧生成或修改几何体,也必须计算法线。例如,一些行进立方体的东西。但这通常需要一个自定义的拟合解决方案(例如,行进立方体法线可以通过不同的方式获得)-因此,如果是这样的话,我们首先需要一些上下文。也许Ash所做的与渲染静态对象不同。如果每帧生成或修改几何体,也必须计算法线。例如,一些行进立方体的东西。但这通常需要一个自定义的拟合解决方案(例如,行进立方体的法线可以通过不同的方式获得)-因此,如果是这样的话,我们首先需要一些上下文。。