我在GLSL中寫了一個基本的頂點着色器。以下是源代碼: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;
}
之後,片段着色器以變化強度float的亮度點亮片段。這裏出了什麼問題:我畫幾個立方體,並將OBJ模型加載到這個世界,或者類似的東西。然後我使用glRotatef()和glTranslatef()並再次繪製相同的東西。 燈在兩個不同的位置出現兩次,(有點)。一旦在翻譯的位置,並在原來的位置。翻譯後的模型僅受翻譯位置中的燈光影響,原始模型僅受原始位置中的燈光影響。另外,至關重要的是我不使用gl_LightSource0 []來解決這個問題。有什麼我做錯了嗎?有沒有什麼辦法解決這一問題?我使用glTranslatef()和glRotatef()進行相機定位和旋轉(如果有的話)。
你的'#version'指令在哪裏? – genpfault 2013-03-06 19:04:18
@genpfault'#version 120' – Abaab 2013-03-06 19:36:29
預期的行爲是什麼?一盞燈照亮一切? – genpfault 2013-03-06 20:00:17