对于照明,我需要片段着色器中的法线向量。我读过的教程要求我提供正常数据以及模型的顶点。但是法线不是已经由顶点指定的面给出了吗?
为了计算法线,我需要三角形的所有三个顶点。但据我所知,我们只能在顶点着色器的每次传递中访问单个顶点。
如何根据顶点数据计算每个像素的法向量?我想在那之后应用法线贴图,但那是稍后的事情,并且与这个问题并不真正相关。
最佳答案
But aren't the normals already given by the faces specified by the vertices?
是的,也不是。从技术上讲,您可以确定每个面的法线,但通常在建模器中设计 3D 模型的艺术家希望微调法线以调整照明计算。
normal vectors for each pixel based on the vertex data?
只需将法线作为变化变量(variing
或 out
关键字,具体取决于 GLSL 版本)传递给片段着色器。法向量将进行重心插值。然后,您可以在片段着色器中将其标准化为单位长度。
关于opengl - 从顶点数据中获取像素法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149452/