OpenGL環境下模型檔案的載入(3DS OBJ)

2021-06-27 04:47:12 字數 1489 閱讀 1059

3ds:

乙個讀取3ds檔案的類cload3ds**ⅰ

乙個讀取3ds檔案的類cload3ds**ⅱ

obj:

obj模型檔案的結構、匯入與渲染ⅰ

obj模型檔案的結構、匯入與渲染ⅱ

雖然原始碼裡使用的load3ds和loadobj均非出自以上鏈結,但大體都是差不多,因此還是有很大的借鑑意義,感謝原作者的無私奉獻。

3ds的讀取就沒什麼好說的了,資料和原始碼實現太多了,想必大家也不會遇到什麼困難,下面重點介紹一下obj的讀取過程。本原始碼可以說是上述obj鏈結裡原始碼的簡化版,因為我緊緊讀取了模型的頂點、紋理以及面資訊,沒有匯出法線。材質方面,顏色全部放棄,僅讀取紋理貼圖,上面的3ds亦是如此,需要其他材質的童鞋在熟悉本教程的原始碼基礎上能夠很好地實現顏色材質的讀取和顯示。說了這麼多,要想使用這個教程提供的原始碼,還需要注意以下幾點:

1.使用的建模軟體為blender,匯出的時候,與下圖保持一致,基本上就可以了。

資料格式:(obj):v -0.041588 0.635349 0.002451; vt 0.343750 0.375000; f 130/165 163/199 131/166; 

(mtl):map_kd earth.jpg; 只用了紋理部分

2. 關於obj讀取模型的一點說明:

在上述給出的連線中,作者考慮了很多種可能的情況,我參照作者提供的原始碼,自己重新寫了乙份,在讀取頂點\紋理\f法線的時候,作者的寫法會消耗一定的記憶體,因此,我參照3ds讀取的方法,全部採取索引的方式,最後重新計算法線,這也就是本文在匯出obj的時候沒有匯出法線的原因。在讀取模型的時候,不是按物件為單位進行讀取儲存,而是以材質為單位儲存,主要是考慮到同乙個模型,使用了多個紋理的情況。這裡並沒有進行具體的測試,留給後來者吧

3. 由於3ds和obj均採用索引的方式儲存,因此,本教程提供的原始碼提供了乙個公共藉口,來儲存從3ds\obj解析來的資料(頂點\紋理\法線,這幾項是一一對應的,還有麵片的索引)。

4.根據檔案的副檔名來識別3ds或者obj

5.要使程式正常執行,需要將本教程原始碼的模型檔案,移動到**.exe所在目錄。如果載入模型失敗,請參考程式輸出。

程式最終執行的效果如下圖:

到這裡,教程也就差不多結束了,很抱歉本文寫的比較粗糙,原始碼完成也有一段時間,以來自己不是很會寫東西,而來時間緊迫,很多技術細節沒有交代清楚,還望大家多見諒。最後也祝願看到本文的童鞋學習愉快!

windows下配置openGL環境

windows環境下安裝glut的步驟 2 以預設目錄為例 1 c program files x86 microsoft visual studio 9.0 vc include gl 把解壓得到的glut.h放到這個gl資料夾裡。沒有gl資料夾可以自己建乙個,一般都有的。2 c program ...

MFC下OpenGL環境搭建

過載mfc中的wm crate訊息響應函式int oncreate lpcreatestruct lpcreatestruct 顯示呼叫init函式,如下 int c3dstereoview oncreate lpcreatestruct lpcreatestruct 在init函式 自定義的 中完...

OpenGL讀取Obj模型檔案

想要順利讀取obj模型檔案,先要了解這種檔案的格式,obj檔案格式是非常簡單的。這種檔案以純文字的形式儲存了模型的頂點 法線和紋理座標和材質使用資訊。obj檔案的每一行,都有極其相似的格式。在obj檔案中,每行的格式如下 字首 引數1 引數2 引數3 其中,字首標識了這一行所儲存的資訊型別。引數則是...