2013-06-26 10 views
0

장면을 보는 방법 중 하나는 gluLookAt를 사용하거나 사용자 정의보기 루틴을 만드는 것입니다. 책의 비행 시뮬레이터에서이 사용자 지정보기 루틴을 보았습니다.OpenGL 사용자 정의 루틴 비행 시뮬레이터

void pilotView(GLdouble planex, GLdouble planey, 
GLdouble planez, GLdouble roll, 
GLdouble pitch, GLdouble heading) 
{ 
    glRotated(roll, 0.0, 0.0, 1.0); 
    glRotated(pitch, 0.0, 1.0, 0.0); 
    glRotated(heading, 1.0, 0.0, 0.0); 
    glTranslated(-planex, -planey, -planez); 
} 

시계 방향으로 카메라를 x도 회전하면 대상 물체를 반 시계 방향으로 x도 회전시키는 것과 같습니다. 따라서 예를 들어 "롤"각도를 지정하면 "glRotated (roll, 0.0, 0.0, 1.0)"대신 "glRotated (-roll, 0.0, 0.0, 1.0)"을 쓰지 않아야합니까?

답변

0

아니요, OpenGL 삼각형이 카메라가 아닌 변형 된 것은 아닙니다. OpenGL에는 카메라 개념이 없습니다. 따라서 변환에 회전을 추가하면이 업데이트 된 변환에 의해 객체가 회전됩니다.

gluLookAt는 객체를 보는 것처럼 객체의 변형을 설정하지만 변환 된 객체는 객체입니다.

이 함수에 대해서는 내 생각에 뷰가 수평으로 정렬되는 대신 평면으로 정렬되고 뒤에서 중앙에 고정되도록 변환을 설정한다고 가정합니다. 그 이유는 회전과 - 번역 사인. 호출은 변환을 설정하지는 않지만이를 업데이트하십시오.

+0

정확합니다. 그게 내 질문이다. "카메라"는보기 작업을 시각화하는 방법 일뿐입니다. 비행기에 z 축을 중심으로 각도 "롤"만큼 회전 시키려면 glRotate 호출을 glRotated (-roll, 0.0, 0.0, 1.0)해서는 안된다는 것이 나의 질문입니다. 그것이 glTranslate 호출에 대해 수행 한 작업입니다. 우리는 glTranslated (planex, planey, planez) 대신 glTranslated (-planex, -planey, -planez)를 썼습니다. 왜냐하면 planex, planey 및 planez로 지정된 양만큼 눈 좌표에서 객체를 멀리 이동시키기 때문입니다. – chinu3d

+0

@ user1903168 답변이 업데이트되었지만 더 정확하게하려면 시뮬레이터에서 좌표계가 설정되는 방법에 대한 세부 정보를 제공해야합니다. – Vasaka