C++ 按距离翻译
我在原点有一个正方形。首先,我想旋转它。然后,将它从原点平移5个单位 旋转后,我想将其平移5的距离。但是当我实现下面的代码时。它不能把它翻译到我想要的地方。正确的翻译方法是什么。C++ 按距离翻译,c++,opengl,C++,Opengl,我在原点有一个正方形。首先,我想旋转它。然后,将它从原点平移5个单位 旋转后,我想将其平移5的距离。但是当我实现下面的代码时。它不能把它翻译到我想要的地方。正确的翻译方法是什么。 glTranslatef(5,5,5);glRotatef(45,x,y,z)如果正方形中心位于原点,则为GLTRANSTEF,然后为glRotatef 要围绕自定义中心旋转,以下是通用公式: TranslationFromRotCenterToOrigin * RotationMatrix * Translation
glTranslatef(5,5,5);glRotatef(45,x,y,z)代码>如果正方形中心位于原点,则为GLTRANSTEF,然后为glRotatef
要围绕自定义中心旋转,以下是通用公式:
TranslationFromRotCenterToOrigin * RotationMatrix * TranslationFromOriginToRotCenter
它在OpenGL中以相反的顺序给出某些内容(因为glTranslatef/glRotatef将当前OpenGL矩阵乘以指定的平移/旋转矩阵)
希望这有帮助你先做什么?你说你想旋转然后翻译,但是你发布的代码是另一个顺序。无论哪种方法,试着颠倒操作顺序。你不先做最接近你正在绘制的操作吗?因为我在glRotatefRotate之后创建正方形,然后进行平移。通常,如果要旋转对象,则要围绕其中心旋转对象(这是对象空间<0,0,0>,但如果先平移,则会将其抛出窗口)。正方形是否位于原点的中心?如果是这样,那么先调用translatef,然后调用旋转。@AndonM.Coleman不使用opengl堆栈,所以添加的最后一个操作是先调用的(所以旋转需要最后写入才能首先调用)?我在原点,所以我在,但我没有得到正确的答案glTranslatef(Distance/sqrt(3),Distance/sqrt(3),Distance/sqrt(3));glRotatef(角度,X,Y,Z)代码>您的方形中心在原点还是方形角?可能我们不了解您的问题。你能发布一个你得到的和你期望的快照吗?可以在快照上随意添加任何信息,如所需的平移和旋转、原点在哪里以及当前视口是什么正方形的原点位于(0,0)。我想在旋转后将原点5从原点移开。轮换很好。我猜,因为我没有Z轴,所以我的平面法线是(0,0,1)。所以通过使用方程d=NP,我得到d=(0,0,1)(x,y,z)。从这个方程我得到d=z。所以我想我可以平移z轴,但是当我这样做的时候,如果你的模型视图是恒等式的,你在正交投影中沿着z轴平移,你不会得到任何结果。
glLoadIdentity();
glTranslatef( 5, 5, 5);
glTranslatef( toRotCenterX, toRotCenterY, toRotCenterZ );
glRotatef( 45, x, y, z );
glTranslatef( -toRotCenterX, -toRotCenterY, -toRotCenterZ );