2011-04-16 25 views
0

2年前我用過opengl。在一個下午我讀了一個tuto,我畫了一個立方體(然後學會了如何加載任何3D模型)並且學會了家中用鼠標移動相機。這很容易,少於100行代碼。我沒有完全得到管道,但我能做東西opengl發生了什麼?現在是什麼樣的噩夢?

現在我需要刷新OpenGL的一些基本的東西,基本上我需要加載一個3D模型(任何型號)和移動模型,固定相機。我認爲會是另一個下午。

我已經花了1天,並沒有什麼工作。我正在閱讀推薦的tuto http://www.arcsynthesis.org/gltut/我沒有得到任何東西,現在只畫一個立方體,你需要大量的線條並使用大量的緩衝區,爲着色器使用一些特殊的語法......我只想畫一個什麼東西立方體。之前它只是定義了6個方面。

這是怎麼回事用OpenGL?有人會認爲現在很好,我認爲它是搞砸了。 有什麼簡單的圖書館可以使我的生活更輕鬆嗎?

回答

1

它是否必須是openGL? XNA提供了繪製3D模型而不會破壞你的背部的能力..可能是值得一試

8

GLUT - http://www.opengl.org/resources/libraries/glut/

ASSIMP - http://assimp.sourceforge.net/

這兩個庫是所有你需要做一個簡單的應用程序,其中你導入一個模型(各種格式)。閱讀它的文檔和示例,以更好地瞭解如何「粘合」OpenGL和ASSIMP的工作。

Documentation

至於是OpenGL的更難以理解?號我已經從近幾年的OpenGL學到的是,GFX編程從未簡單或在幾行代碼完成,你必須組織起來,你必須要小心,甚至一個簡單的原語(例如立體)需要有超過100行的代碼才能使其體面和靈活(例如,如果您想在多邊形或紋理上進行更多細分)。

2

您不必使用緩衝區對象。您可以使用棄用的即時模式。它會變慢,但如果你不太在意,那麼繼續按照以前的方式使用OpenGL。 NeHe在OpenGL 1.x上有一些優秀的tutorials

在OpenGL 3.x和4.x中,Swiftless有一些很好的tutorials(只有幾個非常基本的),但是你發現它的學習曲線非常陡峭。

4

如果你只在兩年前學會了它,那麼教程都非常過時了。已知立即模式在很長很長的時間內已被棄用。實際上是第一個計劃,放棄它,並顯示列表追溯至2003年。

頂點數組,因爲1.1版本已經存在了,而且他們已經爲自從發送幾何OpenGL的首選方法;在即時模式下,每個頂點都會導致幾個函數調用,因此對於任何嚴重複雜的對象,您都需要花更多時間來管理函數調用堆棧,而不是執行實際的渲染工作如果在引入Vertex Arrays後使用Vertex Arrays,切換到Vertex Buffer Objects就像插入或替換幾行一樣複雜。

使用OpenGL-3的最大障礙在於Windows,其中必須使用代理上下文才能訪問選擇OpenGL-3功能以進行上下文創建所需的擴展功能。然而,再次沒有大的障礙,20行代碼頂部。而且,像我這樣的一些程序,無論如何都會創建一個代理GL上下文,所有可共享的數據都將上傳到該上下文中,從而允許嚴格地銷燬/重新創建可見的上下文,但可以完全訪問紋理,VBO和其他東西(可以共享VBO,這是使用它們而不是簡單頂點數組的另一個原因;這看起來可能不是什麼大的東西,至少在單個進程中使用上下文時不會;但是像X11/GLX這樣的平臺可以在X11客戶端之間共享OpenGL上下文,它甚至可能運行在不同的機器上!)

另外像矩陣操作棧的功能存在導致人們誤解,OpenGL是一些矩陣數學庫,有些甚至認爲它是一個特別快速的。這兩個都不是真的。去除矩陣操作函數是非常重要和正確的事情。無論如何,每個嚴肅的OpenGL應用程序都會實現他們自己的矩陣運算。例如,任何使用某種物理引擎的現代遊戲都可以直接在OpenGL(glLoadMatrix或glUniformMatrix)中使用物理計算吐出的變換矩陣,完全繞過其餘的矩陣函數。這也意味着具有多個矩陣堆棧(GL_PROJECTION,GL_MODELVIEW,GL_TEXTURE,GL_COLOR),即能夠在幾個矩陣上使用相同的一組操作函數的唯一原因已被廢棄,並且可能已被諸如glLoadMatrixSelected{f,d}v(GLenum target, GLfloat *matrix)之類的東西取代。然而,制服和着色器已經存在了,所以合乎邏輯的步驟並沒有引入新的功能,而是重複使用已經用於該任務的現有API,而不是已經不再需要的東西。

TL; DR:新的OpenGL-3 API非常簡單地使用它。它更清晰,缺陷更少,恕我直言,也更加新手友好。