2013-11-22 18 views
1

我需要爲我的任務做什麼,是在一個方向上生成一個3D空間中的隨機點。問題是我如何定義這個方向?我該如何改變這個方向。openGL/maths如何設置一個點的方向,並改變這個方向

我所做到目前爲止

-> Generate random point(x, y, z) 
-> generate random latitude between 0 to 360 
-> generate random longitude between 0 to 360 
-> dirX = cos(lat* DEG_TO_RAD) * sin(lon * DEG_TO_RAD); 
    dirY = sin(lat * DEG_TO_RAD); 
    dirZ = cos(lat * DEG_TO_RAD) * cos(lon * DEG_TO_RAD); 

然後我被渲染:

glTranslatef(pointX, pointY, pointZ); 
glRotatef(dirX, 1, 0, 0); 
glRotatef(dirY, 0, 1, 0); 
glRotatef(dirZ, 0, 0, 1); 

是罰款?我想知道我是否做錯了數學或openglwise

+0

嚴格地說,點沒有方向。你可以將它們解釋爲從原點開始的位移,它的確有方向......現在轉到實際問題 - 你想旋轉一個特定的對象還是整個世界?或者你的意思是你想要在某個方向上隨機生成一個點嗎? –

+0

我很抱歉沒有讓我自己清楚。這一點應該移動,翻譯成某個方向。這就是我指的某個特定方向的意思,這就是爲什麼我有經度和緯度來定義這個方向的角度。我稍後將該點用作其他形狀的中心,清楚地表明該物體的方向 – Vortakis

+0

您所指的是* ray *,通常表示爲一對矢量,一個用於位置和一個矢量爲方向。就隨機生成方向矢量而言,如果需要更好的性能,但不需要很高的精度,可以考慮從[-1,1]範圍內隨機選擇方向(X,Y,Z)的每個分量,檢查以確保它不等於(0,0,0),並對其進行標準化。一個'sqrt'將比一堆trig函數快得多。唯一的缺點是它們會略微偏向立方體的邊緣和角落。 – bcrist

回答

0

這並不完全清楚您的意思是有點方向。正如Andon指出的那樣,分數沒有方向。澄清你的問題將(希望)把它變成一個直接可以回答的問題。

幾點建議:

  • 您在隨機生成度緯度和經度,然後轉換爲弧度。只需在0和2PI之間生成一個隨機數就可以開始。

  • 跟蹤您自己的Modelview矩陣。這三個glRotatef電話可能不會做你想做的。這需要一些線性代數訣竅,但是完全值得。你將有一個直觀的3D轉換,它會讓你的生活比處理OpenGL的「便利」方法容易得多。

  • 瞭解最新的OpenGL。您使用的代碼庫已被棄用約6年,並已被更久的着色器編程所取代。