我正在实现一个带有简单阴影(环境+漫反射)的基本高度图。着色是在片段着色器上实现的,如下图所示。
#version 330
in vec3 fragNormal;
out vec4 outColor;
uniform vec3 lightDirection;
uniform vec3 lightColor;
uniform vec3 objectColor;
void main()
{
float ambientStrength = 0.1f;
vec3 ambientColor = ambientStrength * lightColor;
vec3 norm = normalize(fragNormal);
float diff = max(dot(norm, -normalize(lightDirection)), 0.0f);
vec3 diffuseColor = diff * lightColor;
outColor = vec4((ambientColor + diffuseColor) * objectColor, 1);
}
我所做的是基于正常的 fragNormal 计算一个简单的漫反射分量。此变量直接从顶点着色器传递。
这是我目前拥有的屏幕截图:
这是带有像素着色的高度图的预期结果吗?我对表面不是很光滑的事实有点恼火。
但是,如果这是预期的,那么有什么技术可以改善我目前拥有的东西吗?
为了计算法线,我使用了以下算法: 有限差分法(堆栈溢出)