我希望在OpenGL上实现平面着色。我搜索了一下,找到了这个问题:如何计算以质心为基础的光照下的平面着色?。
我理解了最佳答案的思路,现在正在尝试实现它。然而,我不知道如何根据每个顶点的法向量找到表面法线。
以下是顶点着色器中相关的代码:
#version 400 core
...
layout(location = 0) in vec4 position;
layout(location = 1) in vec3 normal;
uniform mat4 Mm;
uniform mat3 normalMatrix;
out vec3 vertexN;
out vec3 vertexP;
...
int main() {
...
vertexN = normalize(normalMatrix * normal);
vertexP = vec3(Mm * position);
...
}
几何着色器中相关的代码:
#version 400 core
...
layout (triangles) in;
layout (triangle_strip, max_vertices=3) out;
in vec3 vertexP[3];
in vec3 vertexN[3];
...
void main(){
...
vec3 centroidPosition(0.0);
for(int i = 0; i < 3; i++) centroidPosition += vertexP[i];
centroidPosition/=3.0;
// calculate surface normal
...
}