我有一个 3D 场景,其中只有一个球体,我有两种纹理 - 一种用于夜晚,一种用于地球的白天。此外,我的场景中有一个位于 (15,15,15) 的光源。对于球体上的每个顶点,我也有法线。
现在我想在这两种纹理之间混合,使白天和黑夜之间的褪色看起来很逼真。因此,我使用点积计算法线和光线之间的角度,但是通过这种方法,如果我检查角度是否> 0(这将是白天),我会得到硬交叉。我需要根据角度混合纹理,这是一个软交叉。
谁能帮助我如何混合纹理?到目前为止我的代码:
float angle = dot(L,N);
vec4 texture = texture2D(day, textureCoord);
texture = texture2D(night,textureCoord) * (1-angle) + texture * angle;
vec4 light = vec4(ambientTerm + diffuseTerm + specularTerm , 1);
if(angle > 0) {
color = light * texture;
} else if(angle >= -0.25) {
color = texture2D(night,textureCoord)*(angle-1) + texture * (angle);
} else if( angle < -0.25) {
color = texture2D(night,textureCoord);
}