2013-07-08 71 views
0

我想圍繞球體繪製軌跡。每個點由經度和緯度座標組成。所以,我要通過第一次旋轉(長),然後是第二次(緯度),然後是平移(z)來放置每個點。圍繞球體(地球)繪製軌跡(線)

但是,如果我做glBegin()glEnd() ......這是被禁止之間的轉換,我不能畫線..

你有關於如何做到這一點任何想法?我是否必須自己計算每個點(x,y,z)的緯度座標,而不是進行變換? (我讀過轉換比我們自己做這個工作要快...)

回答

0

除非你想上傳一個可以爲你做轉換的頂點着色器,否則你必須這樣做。此外,自Ope​​nGL 3.0以來,glRotate等函數實際上已被棄用。

而'慢'是相對的。我相當肯定,使用glRotate()等調用進行旋轉比僅僅計算每個頂點的三維空間中的位置要慢。

在一個相關的說明中,如果它是一個軌跡,你幾乎肯定會想要在地球上跟隨一個大圓圈,而不是將它們繪製成三維空間中的直線。

+0

關於OpenGL 3,我無法使用它,因爲我創建的軟件只能運行在只支持2.1的舊電腦上...所以我必須這樣做: x = calc(long,lat,alt) ; y = calc(long,lat,alt); z = calc(long,lat,alt);每個點能夠繪製一個GL_STRIP_LINE? (我不擔心表現,因爲我沒有畫很多東西) – Lloyd0

0

只是在軌跡上取樣點並將它們繪製爲GL_LINE_STRIP。

以下是一些重要信息:不要使用OpenGL固定功能矩陣堆棧(glRotate,glTranslate,glScale等)。使用真正的矩陣數學庫時,處理起來非常麻煩,而且事情變得更加容易。從現代OpenGL中刪除了固定功能。這給我帶來了第二條建議:不要使用即時模式(glBegin ... glEnd),它是一個性能殺手,並且已經從現代OpenGL中移除。

+0

我通過自己做一些數學來得到每個點的x,y,z的點數? (x = r * sin(A)* cos(B) y = r * sin(A)* sin(B) z = r * cos(A)) 我不能使用openGL 3,你知道嗎一個很好的2.1數學庫? – Lloyd0

+0

@ Lloyd0:是的,我的意思就是這個。數學庫獨立於OpenGL。有些提供了OpenGL的便利接口,但這些接口並不是強制使用的。您也可以使用glLoadMatrix將矩陣加載到其中一個FFP矩陣(模型視圖,投影,紋理,顏色)中,而不是加入統一格式中。這可以用GLM來完成。 – datenwolf