Opengl 从顶点数据中获取像素法线

Opengl 从顶点数据中获取像素法线,opengl,glsl,shader,normals,vertices,Opengl,Glsl,Shader,Normals,Vertices,对于照明,我需要片段着色器中的法线向量。我阅读的教程要求我提供模型顶点旁边的法线数据。但是法线不是已经由顶点指定的面给出了吗 为了计算法线,我需要三角形的所有三个顶点。但据我所知,在顶点着色器的每个过程中,我们只能访问一个顶点 如何根据顶点数据计算每个像素的法向量?我想在那之后应用法线贴图,但那会在后面出现,与这个问题没有真正的关系 但是法线不是已经由顶点指定的面给出了吗 是的,也不是。从技术上来说,你可以确定每个面的法线,但通常在建模师中设计3D模型的艺术家想要微调法线以调整照明计算 基于顶点

对于照明,我需要片段着色器中的法线向量。我阅读的教程要求我提供模型顶点旁边的法线数据。但是法线不是已经由顶点指定的面给出了吗

为了计算法线,我需要三角形的所有三个顶点。但据我所知,在顶点着色器的每个过程中,我们只能访问一个顶点

如何根据顶点数据计算每个像素的法向量?我想在那之后应用法线贴图,但那会在后面出现,与这个问题没有真正的关系

但是法线不是已经由顶点指定的面给出了吗

是的,也不是。从技术上来说,你可以确定每个面的法线,但通常在建模师中设计3D模型的艺术家想要微调法线以调整照明计算

基于顶点数据的每个像素的法向量


只需将法线作为可变变量(
variable
out
关键字,取决于GLSL版本)传递给片段着色器。法向量将以重心插值。然后可以在片段着色器中将其规格化为单位长度。

答案的第一部分很清楚,我想稍后用法线贴图微调法线。但是,如果只给出一个(当前)顶点,而不是所有三个三角形角,那么如何在顶点着色器中计算法线?@sharethis:在顶点着色器中不计算法线。对渲染的每个帧重复此操作将效率低下。加载模型时只计算一次法线,通常甚至不在渲染器中计算它们。通常情况下,3D模型完全用法线保存。@sharethis:我详细解释了如何计算网格的顶点法线,只是为了得到正确的答案:不能在顶点着色器中计算顶点法线,但是,如果可以在顶点着色器之前使用几何体着色器,则在技术上可以动态计算顶点法线。看见