나는 이것이 간단하고 직선적이라고 생각했지만 그렇지 않았습니다. openGL 응용 프로그램에 카메라가 있고 표시된 이미지를 각각 카메라 "위치"로 변환합니다. 위치가 위로 변경됨 및 아래로으로 변경되었습니다. 카메라는 왼쪽을 사용하여 회전 할 수 있습니다. 및 오른쪽. 카메라가 회전하면 전진 및 후진 운동이 달라야합니다.카메라를 각각 해당 위치로 이동
//Somewhere in event handler switch
else if (key == GLUT_KEY_UP|| key == GLUT_KEY_DOWN) {
char direction = key==GLUT_KEY_UP?1:-1; //Whether it is forward or backward movement
std::cout<<"Moving camera in direction "<<(int)direction<<" with angle "<<rotate_y<<'\n';
std::cout<<" - this means X is multiplied by "<<((sin((rotate_y/180)*M_PI)+1)/2)<<'\n';
camera_x += 0.5*((sin((rotate_y/180)*M_PI)+1)/2)*direction;
camera_z += 0.5*((cos((rotate_y/180)*M_PI)+1)/2)*direction;
}
원래의 회전 각도에 있지만 math.h
에서 sin()
라디안을 허용 : 이것은 내가 만들어 한 것입니다. 결과에 0을 추가하여 0-2 사이의 결과를 얻습니다. 그런 다음 결과를 2로 나눌 때 sin
또는 cos
진폭을 2에서 1로 변경합니다.
즉, 카메라가 0, 90, 180, 270 또는 360도 각도로 보일 때 함수는 0-1을 반환해야합니다 값. 내가 맞습니까?
처음의 0.5는 단지 이동 속도입니다.
나를 분명하게 해주셔서 감사합니다. OpenGL 세계가 조금 뒤틀린 것처럼 보이기 때문에 원하는 결과를 얻으려면 'sin (360 각)'을 수행해야했습니다. –