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

标签 opengl glsl shader normals vertices

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

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

如何根据顶点数据计算每个像素的法向量?我想在那之后应用法线贴图,但那是稍后的事情,并且与这个问题并不真正相关。

最佳答案

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?

只需将法线作为变化变量(variingout 关键字,具体取决于 GLSL 版本)传递给片段着色器。法向量将进行重心插值。然后,您可以在片段着色器中将其标准化为单位长度。

关于opengl - 从顶点数据中获取像素法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149452/

相关文章:

c - GLSL:片段着色器计数 'out' s

c++ - GL_SHADER_STORAGE_BUFFER 内存限制

java - 在运行 OSX 10.8.5 的 iMac 上使用 LWJGL 创建 FBO

Java OpenGL 混合图像颜色

OpenGL顶点着色器转换和输出

c++ - 如何在结构数组中设置统一值?

opengl-es - OpenGL 着色器的显式与自动属性位置绑定(bind)

matrix - float4 乘以 _World2Object 不是一个 4by4 矩阵吗?

Android:Open GL ES 中的 Uniform、mat4 和 vec4 是什么意思?

c++ - 为什么在 osg 中添加相机后相机不再是另一个相机的子相机?