【发布时间】:2013-03-13 23:54:17
【问题描述】:
我在 GLSL 中编写了一个基本的顶点着色器。以下是源代码:
varying float intensity;
uniform vec4 lightPos;
void main() {
intensity = 0.1;
vec3 tfVert = (gl_ModelViewMatrix*gl_Vertex).xyz;
vec3 tfNorm = normalize(gl_NormalMatrix*gl_Normal).xyz;
vec3 tfLightPos = (gl_ModelViewMatrix*lightPos).xyz;
vec3 lightDir = normalize(tfLightPos-tfVert).xyz;
intensity += dot(lightDir, tfNorm);
gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
}
之后,片段着色器以不同强度浮动的亮度照亮片段。出了问题:我画了几个立方体,然后将一个 OBJ 模型加载到世界中,或者类似的东西。然后我使用 glRotatef() 和 glTranslatef() 并再次绘制相同的东西。 灯光出现两次,(有点)在两个不同的位置。一次在翻译位置,一次在原始位置。平移后的模型仅受平移位置的光线影响,而原始模型仅受原始位置的光线影响。另外,我不使用 gl_LightSource0[] 来解决这个问题也很重要。有什么我做错了吗?有没有什么办法解决这一问题?我正在使用 glTranslatef() 和 glRotatef() 进行相机定位和旋转,如果这很重要的话。
【问题讨论】:
-
你的
#version指令在哪里? -
@genpfault
#version 120 -
预期的行为是什么?一盏灯照亮一切?
-
@genpfault 是的,这就是我们想要的效果......