문제

나는 게임 세계에서 건물을 그립니다. 다음 코드로 그늘을 그립니다.

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
}
도움이 되었습니까?

해결책

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

#18.050을 참조하십시오

요컨대, 올바른 참조 프레임에서 조명 위치를 정의하고 각 프레임을 원하는 위치에 유지하기 위해 각 프레임을 적절한 변환을 적용해야합니다.

다른 팁

나는 당신의 문제가 OpenGL 조명이 세계 좌표에 지정되어 있지만 카메라 좌표에 내부적으로 저장된다는 사실에서 발생한다고 생각합니다. 이것은 일단 당신이 일단 당신이 빛을 놓으면, 당신이 당신의 카메라를 움직일 때마다, 당신의 빛이 그것과 함께 움직일 것임을 의미합니다.

이 문제를 해결하려면 카메라를 움직일 때마다 조명을 재배치하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top