Kendi (opengl dahili değil) ışığımı kullanıyorum. Şimdi problem i ile 2 ışık kaynağı olduğunda ben sadece ÇıktıRengi değişkeni eklemek çünkü ortam renk vec4(0.2f, 0.2f, 0.2f, 1.0f)
modeline ortam rengi vec4(0.4f, 0.4f, 0.4f, 1.0f)
olacağı görüşünde yani,GLSL birden fazla ışıktan renk vektörünü hesaplıyor
#version 330
in vec4 vertexPosition;
in vec3 surfaceNormal;
in vec2 textureCoordinate;
in vec3 eyeVecNormal;
out vec4 outputColor;
uniform sampler2D texture_diffuse;
uniform bool specular;
uniform float shininess;
struct Light {
vec4 position;
vec4 ambientColor;
vec4 diffuseColor;
vec4 specularColor;
};
uniform Light lights[8];
void main()
{
outputColor = texture2D(texture_diffuse, textureCoordinate);
for (int l = 0; l < 8; l++) {
vec3 lightDirection = normalize(lights[l].position.xyz - vertexPosition.xyz);
float diffuseLightIntensity = max(0, dot(surfaceNormal, lightDirection));
outputColor.rgb += lights[l].ambientColor.rgb * lights[l].ambientColor.a;
outputColor.rgb += lights[l].diffuseColor.rgb * lights[l].diffuseColor.a * diffuseLightIntensity;
if (specular) {
vec3 reflectionDirection = normalize(reflect(lightDirection, surfaceNormal));
float specular = max(0.0, dot(eyeVecNormal, reflectionDirection));
if (diffuseLightIntensity != 0) {
vec3 specularColorOut = pow(specular, shininess) * lights[l].specularColor.rgb;
outputColor.rgb += specularColorOut * lights[l].specularColor.a;
}
}
}
}
: Bu benim parça gölgelendirici programıdır. Birden çok ışık için tek bir ortam ve tek bir yaygın renk değişkenini nasıl hesaplayabilirim, bu yüzden gerçekçi bir sonuç alır mıyım?
Ambient, yansıyan ışık için ayakta durduğumuz bir hack ... bu yüzden istediğiniz her şeyi yapabilirsin - Neden sadece ortam ışığından ziyade sahnenin bir özelliğini yapmıyorsunuz? – JasonD
Muhtemelen parçanın uzaklığı göz önüne alındığında, ışığın yoğunluğunu azaltmak isteyebilirsiniz. Sabit işlevli boru hattının kullandığı formüllere bakın. –