2013-10-11 93 views
-1

我在原點有一個正方形。首先,我想旋轉它。然後,將它從原點翻譯5個單位。根據距離翻譯

旋轉後我想翻譯它的距離爲5.但是,當我實現下面的代碼。它不會將其轉換到我想要的位置。什麼是翻譯的正確方法。 glTranslatef(5,5, 5); glRotatef(45, x,y,z);

+1

哪些是你第一次在做什麼?你說你想旋轉然後翻譯,但是你發佈的代碼是以其他順序。無論哪種方式,嘗試顛倒操作的順序。 –

+0

你不是最接近你先畫的東西嗎?因爲我在glRotatef之後創建了我的廣場 – james456

+0

旋轉然後翻譯一件事。一般來說,如果你想旋轉一個對象,你想圍繞它的中心旋轉對象(這是對象空間< 0, 0, 0 >,但如果你首先翻譯你把它扔出窗口)。 –

回答

0

如果您的方形中心位於原點,glTranslatef,然後glRotatef。

以繞定製中心,這裏是通式:

TranslationFromRotCenterToOrigin * RotationMatrix * TranslationFromOriginToRotCenter 

其給出以相反的順序在OpenGL東西(原因的glTranslatef/glRotatef由指定的平移/旋轉矩陣乘以當前的OpenGL矩陣)

glLoadIdentity(); 
glTranslatef(5, 5, 5); 
glTranslatef(toRotCenterX, toRotCenterY, toRotCenterZ); 
glRotatef(45, x, y, z); 
glTranslatef(-toRotCenterX, -toRotCenterY, -toRotCenterZ); 

希望這有助於

+0

mine是在原點,所以我做但我沒有得到正確的答案 'glTranslatef(Distance/sqrt(3),Distance/sqrt(3),Distance/sqrt(3)); glRotatef(角度,X,Y,Z); ' – james456

+0

是你的方**中心**在原點或你的廣場**角** –

+0

也許我們不明白你的問題。你能張貼你得到的和你的期望的快照嗎?隨意添加快照中的任何信息,例如您期望的翻譯和旋轉,原點在哪裏以及當前視口是什麼 –