【发布时间】:2021-12-19 13:39:35
【问题描述】:
我想在 OpenGL 上实现平面着色。我搜索了一下,发现了这个问题:How to achieve flat shading with light calculated at centroids?。
我了解最佳答案的想法,我正在尝试实施它。但是,在给定三角形每个顶点的法线的情况下,我无法弄清楚如何找到表面法线。
顶点着色器中的相关代码:
#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
...
}
【问题讨论】: