OpenGL照明是计算机图形学中模拟光线与物体交互的核心技术,涉及以下基础概念和实现细节:
// 顶点着色器(传递法线和位置)
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
uniform mat4 model, view, projection;
out vec3 Normal, FragPos;
void main() {
gl_Position = projection * view * model * vec4(aPos, 1.0);
FragPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(transpose(inverse(model))) * aNormal; // 处理非统一缩放
}
// 片段着色器(平行光+Phong)
uniform vec3 lightDir; // 归一化的平行光方向
uniform vec3 lightColor;
uniform float ambientStrength;
void main() {
vec3 ambient = ambientStrength * lightColor;
vec3 diffuse = max(dot(normalize(Normal), -lightDir), 0.0) * lightColor;
FragColor = vec4((ambient + diffuse) * objectColor, 1.0);
}
FragColor = vec4(Normal * 0.5 + 0.5, 1.0);
通过合理配置光照参数和优化渲染管线,可平衡真实感与性能。
没有搜到相关的文章