我认为这将简单明了,但事实并非如此。我在 openGL 应用程序中有一个摄像头,我正在将显示的图像分别转换为摄像头“位置”。位置由Up和更改Down。可以使用Left和旋转相机Right。当相机旋转时,向前和向后移动应该是不同的。这是我编造的:
//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;
}
原始旋转以度为单位,但sin()
frommath.h
接受弧度。我在结果中加 1 以获得 0-2 之间的结果。然后,当我将结果除以 2 时,我将sin
or幅度从 2 更改为 1。
这意味着 - 当相机观察 0、90、180、270 或 360 度时,函数应返回 0-1 值。我对吗?
开头的0.5只是移动速度。cos