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
C++ 按距离翻译_C++_Opengl - Fatal编程技术网

C++ 按距离翻译

C++ 按距离翻译,c++,opengl,C++,Opengl,我在原点有一个正方形。首先,我想旋转它。然后,将它从原点平移5个单位 旋转后,我想将其平移5的距离。但是当我实现下面的代码时。它不能把它翻译到我想要的地方。正确的翻译方法是什么。 glTranslatef(5,5,5);glRotatef(45,x,y,z)如果正方形中心位于原点,则为GLTRANSTEF,然后为glRotatef 要围绕自定义中心旋转,以下是通用公式: TranslationFromRotCenterToOrigin * RotationMatrix * Translation

我在原点有一个正方形。首先,我想旋转它。然后,将它从原点平移5个单位

旋转后,我想将其平移5的距离。但是当我实现下面的代码时。它不能把它翻译到我想要的地方。正确的翻译方法是什么。
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 );