Tôi đang cố tạo một bóng đổ tùy chỉnh và đang thử nhiều thứ khác nhau theo thời gian. Một số giải pháp tôi đã tìm thấy hiệu quả hơn, những người khác lại tệ hơn. Đối với câu hỏi này tôi đang sử dụng các giải pháp mà làm việc tốt nhất cho đến nay.Tại sao mã chiếu sáng GLSL thay đổi điểm sáng bằng máy ảnh?
Vấn đề của tôi là, nếu tôi di chuyển "camera" xung quanh, các vị trí ánh sáng dường như cũng di chuyển xung quanh. Giải pháp này có chuyển động rất nhỏ nhưng đáng chú ý trong đó và vị trí ánh sáng dường như ở trên vị trí cần thiết.
Mặc định OpenGL lighting (w/o shaders) hoạt động tốt (ổn định vị trí ánh sáng) nhưng tôi cần đổ bóng cho multitexturing và tôi đang lập kế hoạch sử dụng một phần của nó cho hiệu ứng ánh sáng khi nó làm việc.
Vertex Nguồn:
varying vec3 vlp, vn;
void main(void)
{
gl_Position = ftransform();
vn = normalize(gl_NormalMatrix * -gl_Normal);
vlp = normalize(vec3(gl_LightSource[0].position.xyz) - vec3(gl_ModelViewMatrix * -gl_Vertex));
gl_TexCoord[0] = gl_MultiTexCoord0;
}
Fragment Nguồn:
uniform sampler2D baseTexture;
uniform sampler2D teamTexture;
uniform vec4 teamColor;
varying vec3 vlp, vn;
void main(void)
{
vec4 newColor = texture2D(teamTexture, vec2(gl_TexCoord[0]));
newColor = newColor * teamColor;
float teamBlend = newColor.a;
// mixing the textures and colorizing them. this works, I tested it w/o lighting!
vec4 outColor = mix(texture2D(baseTexture, vec2(gl_TexCoord[0])), newColor, teamBlend);
// apply lighting
outColor *= max(dot(vn, vlp), 0.0);
outColor.a = texture2D(baseTexture, vec2(gl_TexCoord[0])).a;
gl_FragColor = outColor;
}
Tôi đang làm gì sai?
Một vài hình ảnh hoặc thậm chí là liên kết tới video trên Youtube của sự cố, sẽ giúp chúng tôi chẩn đoán sự cố. –