您好,我正在做一个项目,当我移动主要对象时出现屏幕/地面抖动问题。
通常,当我使用“w”按钮移动时,我不会遇到问题。但是,如果在我旋转相机时移动,我就会遇到问题。
看:用鼠标右键给出像 30 的度数。(不要释放按钮)并在旋转对象时保持 w 按钮。你会看到地面的震动。
我认为问题在于我的 looat 函数计算。
gluLookAt(sin(rot*PI/180)*(10-fabs(roty)/4) +movex ,3-(roty/2), cos(rot*PI/180)*(10-(fabs(roty)/4)) +movez , -sin(rot*PI/180)*6 + movex, roty, -cos(rot*PI/180)*6 +movez, 0, 1, 0);
这是我的旋转功能。我在这个函数之后绘制了所有内容。
void System::rotater(){
if(mouseStates[2][0]==1 && mx!= savex && mx!=mouseStates[2][1]){
rot += (mx-mouseStates[2][1]) * 90 / glutGet(GLUT_WINDOW_WIDTH)/2;
if(rot>360)rot-=360;
if(rot<0)rot= 360+rot;
}
glRotatef(rot,0,1,0);
}
最后我的移动选项在这里:
if(a==87 || a==119){
movex -= sin(rot*PI/180)/3;
movez -= cos(rot*PI/180)/3;
}