2009-12-16 5 views
3

가 내 게임 세계에 건물을 그릴 카메라를 회전, 내가 그늘 그들 :OpenGL을 조명 문제

GLfloat light_ambient[] = {0.0f, 0.0f, 0.0f, 1.0f}; 
GLfloat light_position[] = {135.66f, 129.83f, 4.7f, 1.0f}; 

glShadeModel(GL_SMOOTH); 

glEnable(GL_LIGHT0); 
glEnable(GL_COLOR_MATERIAL); 

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); 
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 

glColorMaterial(GL_FRONT, GL_AMBIENT); 

그것은 잘 작동합니다.

하지만 세상에서 비행하기 시작하면 빛은 마치 세계가 회전하는 물체 인 것처럼 반응합니다. 내 카메라 각도가 변경되면 조명이 바뀝니다.

어떻게 그 회전을 되돌릴 수 있습니까? 그래서 조명은 내가 실제로 세계를 회전시키지 않는다고 생각할 것입니다. 그리고 나서 태양이 하늘에있는 지에 따라 건물에 정적 음영이 생길 수 있습니다.

편집 :

int DrawGLScene() 
{ 

    // stuff 

    glLoadIdentity(); 

    glRotatef(XROT, 1.0f, 0.0f, 0.0f); 
    glRotatef(YROT, 0.0f, 1.0f, 0.0f); 
    glRotatef(ZROT, 0.0f, 0.0f, 1.0f); 

    glTranslatef(-XPOS, -YPOS, -ZPOS); 

    // draw world 
} 
+0

문제는 운동/회전 코드에있을 가능성이 높습니다. – DShook

+0

렌더링 코드 –

답변

4

http://www.opengl.org/resources/faq/technical/lights.htm

는 # 한마디로

18.050, 당신은 당신이 바로 그 기준에 빛의 위치를 ​​정의하고 있는지 확인해야합니다 참조 : 여기에 렌더링 코드 프레임을 만들고 각 프레임을 적절한 변환을 적용하여 원하는 위치에 유지하십시오.

+0

아를 추가했습니다. 감사합니다. –

1

OpenGL 조명이 World Coordinates에 지정되어 있지만 Camera Coordinates에 내부적으로 저장된다는 사실 때문에 문제가 발생한다고 생각합니다. 즉, 일단 빛을 배치하면 카메라를 움직일 때마다 빛이 함께 움직입니다.

이 문제를 해결하려면 카메라를 이동할 때마다 조명의 위치를 ​​변경하기 만하면됩니다.