2012-11-28 49 views
1

可能重複:
Drawing a sphere in OpenGL ES球中的OpenGL ES 2.0的iOS

我已瀏覽了相當一段時間了,而且還沒有找到適當的答案。我開始學習Opengl ES 2.0(因爲我需要在大學開展一個項目),並且最近完成了一個圈子的繪製。 WOOPIE!

我已經看了很多類似的問題,但它或者過時了,或者我太複雜了,我無法掌握。 任何人都可以指出我如何在iOS上使用opengl ES 2.0繪製堅實球體的正確方向嗎?

回答

6

我不確定你有多遠,所以我只想給出一些我認爲可能有幫助的一般說明,並指出一些我一直用來攀登學習的資源曲線。

球體是一個足夠複雜的對象,您可能不想在代碼中生成頂點,因爲您可能已經繪製了圓 - 您將需要使用像Blender或Maya或Houdini這樣的程序,無論你喜歡用什麼來建立一個3D對象,然後導出它。

您的目標是遵循以下工作流: 3D程序> .obj或者.collada文件> OpenGL可以使用的頂點數組。你的頂點數組(應該是一個C數組[],而不是NSArray)將爲每個頂點保存一個{x,y,z}位置,並且你可能還想使用紋理座標和法線。如果您計劃使用紋理,則需要從3D程序中導出紋理座標,如果您計劃照明該對象,則需要導出法線。紋理座標將採用格式{s,t},它將與其關聯的頂點連接到矩形紋理上的2d座標。法線將是格式爲{x,y,z}的向量。 tex座標&法線可能在同一個陣列中,您有頂點(交錯)或單獨的陣列。如果它們是交錯的,那麼在你的代碼中你將有一個VBO,通常它會更快,但是如果它們不是,你將擁有獨立的VBO - 一個用於位置頂點,一個用於tex座標,一個用於法線。

這是一個很好的腳本,用於將.obj轉換爲與OpenGL一起使用的C頭文件。從您的3D節目導出到.OBJ後,您會在.OBJ傳遞給這個腳本,它會吐出.h文件: http://heikobehrens.net/2009/08/27/obj2opengl/

一旦你的C頭文件,你剛纔的#import 「sphere.h」 - 然後當您稍後調用glBufferData讀取頂點時,您傳遞的是sphere.h中的數組的名稱。

這本書是我在iOS上學習OpenGL時遇到的最好的書。它提供了對GLKit類的很好的解釋,並且對初學者很友好: http://my.safaribooksonline.com/book/animation-and-3d/9780132478939

並且萬一它有幫助,下面是一些示例代碼,我將它們放在一起用於幾個月前的一次演講。它實際上把我們放在一個爆炸的球體裏面,讓我們刷卡旋轉: http://davidsweetman.com/mobilemeetup-talk-glkit-demo.html

+0

嗨。你提到我們的工作流程應該是3D程序> .obj或者.collada文件> .h文件。你能推薦任何腳本,比如你爲.obj文件所做的一個腳本,該腳本將collada文件轉換爲.h,以用於OpenGL?感謝:) – ScarletWitch

+0

我相信有一個collada導入程序包含在本書學習OpenGL ES for iOS的示例代碼中:http://my.safaribooksonline.com/book/animation-and-3d/9780132478939 – jankins

+0

男人你真棒!非常感謝! – gbk