【发布时间】:2011-12-04 14:24:55
【问题描述】:
VC++ 2010、OpenGL、GLSL、SDL
我正在转向着色器,并且遇到了最初在使用 ogl 管道时出现的问题。也就是说,灯光的位置似乎指向我的相机所面对的任何方向。在 ogl 管道中,它只是高光,可以通过以下方式修复:
glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, 1.0f);
这是两个着色器:
顶点
varying vec3 lightDir,normal;
void main()
{
normal = normalize(gl_NormalMatrix * gl_Normal);
lightDir = normalize(vec3(gl_LightSource[0].position));
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
片段
varying vec3 lightDir,normal;
uniform sampler2D tex;
void main()
{
vec3 ct,cf;
vec4 texel;
float intensity,at,af;
intensity = max(dot(lightDir,normalize(normal)),0.0);
cf = intensity * (gl_FrontMaterial.diffuse).rgb +
gl_FrontMaterial.ambient.rgb;
af = gl_FrontMaterial.diffuse.a;
texel = texture2D(tex,gl_TexCoord[0].st);
ct = texel.rgb;
at = texel.a;
gl_FragColor = vec4(ct * cf, at * af);
}
任何帮助将不胜感激!
【问题讨论】: