2010-11-10 90 views
6

目前我正在試圖使用OpenGL(使用SDL)來繪製一個立方體的位置,我離開單擊屏幕,然後去指向我右鍵單擊屏幕的位置。尋找角度的X,Y,Z軸的三維 - 的OpenGL/C++

我可以成功地借鑑使用gluUnproject在我想要的位置的立方體 - 意義我已經知道我的立方體位於座標。

但是我不知道如何計算都使我的立方體點在新位置需要的角度。

當然我仍在使用gluUnproject找到我右鍵點擊的座標,但我只知道如何繞Z軸使用2D圖形旋轉。例如之前,如果我想圍繞Z軸旋轉一個四邊形(當然,這將是一個自上而下的視圖,其中Z軸仍在「穿過」屏幕)2D中我會做類似:

angle = atan2(mouseCoordsY - quadPosY, mouseCoordsX - quadPosX); 
glRotatef(angle*180/PI, 0, 0, 1); 

我的問題是,我該如何去做這個3D?

  • 我是否需要像上面那樣計算每個軸的角度?
  • 如果讓我怎麼計算繞X軸和Y軸旋轉的角度?
  • 如果不是,我應該用什麼方法來達到我想要的效果?

任何幫助是極大的讚賞。

+0

如何指定Z座標每個鼠標點擊來表示?如果你只設置爲0,那麼2D幾何就足夠了,我猜這不是你的意圖。 – 2010-11-10 10:09:22

+0

在3D空間中單擊應該定義一個光線,而不是一個點。我很想知道你是如何實現定位立方體的。 – tafa 2010-11-10 10:15:10

+0

@Marcelo Cantos:如果我錯誤地理解了你的問題,請原諒我,但我對此很陌生,所以雖然我想我知道你在問什麼,但我仍然可能有錯誤的想法。基本上,如果我的立方體在(100,200,300),並且點擊(400,500,600),我需要找到我需要旋轉立方體的角度,以便讓它看到第二組座標。 – 2010-11-10 10:15:46

回答

9

如果你的立方體是在A =(X0,Y0,Z0)

如果你的立方體目前正在研究B =(X1,Y1,Z1)

,如果你希望它看起來在那麼C =(x2,y2,z2)

令V1是從A矢量到B

V1 = B - 甲

和V2是從A所述一個至C

V2 = C - 甲

首先規範化他們。

v1 = v1/|v1| 
v2 = v2/|v2| 

然後計算出的旋轉角度和旋轉軸爲

angle = acos(v1*v2) //dot product 
axis = v1 X v2 //cross product 

你可以調用glRotate與

glRotate(angle, axis[0], axis[1], axis[2]) 
+0

非常感謝你的回答tafa!過去幾天我一直在尋找關於這個問題的教程和其他資源,並且已經用dot產品測試過的東西,但是因爲我只是從2D來的,所以對我來說沒有多大意義,但是你的回答已經以非常明確的方式解釋了我需要知道的一切,沒有任何資源I發現在谷歌可以,謝謝 – 2010-11-10 12:14:48

+0

@檸檬檸檬,很高興聽到這一點。 – tafa 2010-11-10 12:24:20