Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 在OpenGL中旋转一点_Visual C++_Opengl_Math - Fatal编程技术网

Visual c++ 在OpenGL中旋转一点

Visual c++ 在OpenGL中旋转一点,visual-c++,opengl,math,Visual C++,Opengl,Math,我有一个立方体,我想在XZ轴的位置上移动。每次立方体移动到网格中的另一个点时,它都会旋转立方体。立方体将以90度翻转。问题就在这里。立方体在旋转时会稍微下沉到网格底部。我不知道如何解决这个问题。有什么建议吗 if( (mvPosition.z - mvLastPosition.z) > 0 || (mvPosition.z - mvLastPosition.z) < 0) { glRotatef( (mvPosition.z - mvLastPosition.z) * 90.

我有一个立方体,我想在XZ轴的位置上移动。每次立方体移动到网格中的另一个点时,它都会旋转立方体。立方体将以90度翻转。问题就在这里。立方体在旋转时会稍微下沉到网格底部。我不知道如何解决这个问题。有什么建议吗

if( (mvPosition.z - mvLastPosition.z) > 0 || (mvPosition.z - mvLastPosition.z) < 0)
{
    glRotatef( (mvPosition.z - mvLastPosition.z) * 90.0f, 1.0f, 0.0f, 0.0f);
}
else if ( (mvPosition.x - mvLastPosition.x) > 0 || (mvPosition.x - mvLastPosition.x) < 0  )
{
    glRotatef( (mvPosition.x - mvLastPosition.x) * -90.0f, 0.0f, 0.0f, 1.0f);
}
if((mvPosition.z-mvLastPosition.z)>0 | |(mvPosition.z-mvLastPosition.z)<0)
{
glRotatef((mvPosition.z-mvLastPosition.z)*90.0f、1.0f、0.0f、0.0f);
}
else如果((mvPosition.x-mvLastPosition.x)>0 | |(mvPosition.x-mvLastPosition.x)<0)
{
glRotatef((mvPosition.x-mvLastPosition.x)*-90.0f、0.0f、0.0f、1.0f);
}

我所能想到的就是:代码会累积计算错误,这是浮点算法不可避免的。解决这个问题的方法不仅仅是用glRotatef更新旧矩阵,而是用glLoadIdentity()重置它们,并在每一帧计算新矩阵。您好。谢谢你的建议。对OpenGL来说相当陌生,所以我可以使用我能得到的所有帮助!不想成为一个傻瓜,但有没有办法在一个固定点上翻转立方体。根据我一直在研究的,我必须将原点平移到旋转点,然后再次平移。但我在翻译原文时几乎失去了它。。。