카메라 공간으로 방향 빛을 변환하는 I 조명에 대해 다음과 GLSL 코드가 있습니다어떻게 GLSL
uniform vec3 lightDir; // Parallel light
uniform float ambient;
uniform vec3 lightColour;
void main()
{
gl_Position = ftransform();
vec3 eyeNormal = normalize(gl_NormalMatrix * gl_Normal);
float intensity = max(ambient, dot(eyeNormal, normalize(-lightDir));
gl_FrontColor = gl_Color * vec4(lightColour, 1.0) * intensity;
}
빛 벡터는 세계 공간에서 지정됩니다. gluLookAt
을 사용하여 카메라 방향과 위치를 설정했습니다. OpenGL은 라이트 벡터가 카메라 공간에있는 것으로 가정하므로 라이트는 고정 된 방향으로 머물러 있지 않고 카메라로 이동합니다.
gluLookAt
을 호출하기 전과 후에 쉐이더를 활성화하고 라이트 벡터를 설정하려고했지만 동일한 효과가 나타납니다. 라이트 벡터를 올바르게 변형하려면 정확히 무엇을해야합니까?
나는 쉐이더에 gl_NormalMatrix에 의해 빛의 방향 광선을 곱한 시도하고 아무런 효과가 없었다. 다음과 같이 gl_ModelViewMatrix를 곱해 보았습니다. vec3 lightEyeDir = normalize (vec3 (gl_ModelViewMatrix * vec4 (-lightDir, 1.0))); 이렇게하면 확산 기여도가 완전히 사라집니다. 프로그램 코드에서 라이트 벡터를 변형하려면 어떤 변환이 필요합니까? – Aaron
역 모델 행렬을 사용하여 light 디렉토리를 변환하면 모형 공간 광원을 얻어야합니다. – Tryum
NormalMatrix는 ModelView 행렬의 회전 부분입니다 (변환 및 축척 없음). 빛에 곱하면 모델 회전을 적용한다는 의미입니다. – MaR