我有我的iPhone應用程序中的(x,y,z)座標40點。現在我只是NSLog他們。但我想在...... 3D中展示它們!
我該怎麼做?我必須使用openGL ES嗎?其他可能性(如果有的話)有哪些?
我從來沒有在編程中使用3D ......這是一件困難的事情嗎?在iPhone上以三維(x,y,z)座標顯示點?
謝謝!
我有我的iPhone應用程序中的(x,y,z)座標40點。現在我只是NSLog他們。但我想在...... 3D中展示它們!
我該怎麼做?我必須使用openGL ES嗎?其他可能性(如果有的話)有哪些?
我從來沒有在編程中使用3D ......這是一件困難的事情嗎?在iPhone上以三維(x,y,z)座標顯示點?
謝謝!
您可以使用CGContext繪圖API執行自己的3D數學運算並渲染到二維曲面,也可以使用OpenGL ES爲您進行轉換和渲染。兩種選擇都有優點和缺點,而且都有學習曲線。
我推薦使用OpenGL選項,因爲最終的結果會更簡單,更快,並且您選擇的技能將更具可重用性。
如果您要在3D中顯示點並進行自己的數學計算,只要它們都是點並且您正在直接觀察一個軸,就非常簡單。道理很簡單,你可以使用像這樣開始:
http://www.cleverpig.com/tutorials/starfield/
現在,如果你想用一個更現實的透視投影,畫線,3D對象,用「相機」或播放做複雜的動畫,OpenGL ES將被指示。
讓我給出一個非常簡單的硬連線設置描述,如果您只是想在不學習任何新API的情況下繪製點,就可以開始使用。
讓我們假設一個90度視野的相機。假設您想要繪製一個寬度和高度爲w
的方形窗口。將「z
」座標解釋爲屏幕中距離的距離。
然後你繪製座標(X,Y)
給出的點(x,y,z)
通過
X = w/2+w/2*x/z
Y = w/2+w/2*y/z
的w/2+
位偏移到你的窗口的中心。 w/2*
位是一個縮放比例,使您的90度視野填滿窗口。 /z
但是是一個縮放,使更遙遠的事情看起來更小。而已!
雖然有一些事情要注意。如果z <= 0
那麼你不想繪製那個點,因爲它在相機後面,或者更糟糕的是,在屏幕的平面上導致除以零。在繪圖之前,您可能想要檢查X
和Y
是否在範圍內。如果沒有,那麼你會試圖畫出你的視野之外的點。
當然,OpenGL可以爲你自動完成大部分工作,它可以讓你改變攝像機,繪製更多點,旋轉點以及快速完成這些任務。但首先了解這些原則是很好的。
(BTW常見的做法是用z<0
而不是z>0
只畫出點。在這種情況下,你需要在上面的代碼與-
符號來代替+
。)
(固定錯字。感謝您指出出來!)
「常見約定是僅繪製z <0而不是z <0」的點。那裏有一個錯字嗎? – Ponkadoodle 2010-05-06 00:33:09