OpenGL實現3DS檔案中的模型自由旋轉

2021-03-31 08:56:30 字數 826 閱讀 8352

現在已經有很多**和書籍提到在opengl中實現讀入和顯示3ds檔案中的模型。但是在很多場合,僅讀入和顯示是不夠的。我們需要從各個角度觀察模型,以便更好地理解模型的形態,形成更為直觀的感性認識。例如,在醫學髁上骨折診斷中,如果把骨折後,斷骨錯位旋轉的情況用三維模型模擬出來,並僅用滑鼠的拖動就能實現從任何角度**骨折的情況,這將對醫生做出正確的診斷大有裨益。這也是我們為何考慮實現此項功能的初衷。本文將簡要介紹3ds檔案格式,怎樣讀入和顯示模型,而重點放在通過滑鼠拖動實現模型自由旋轉的數學基礎和程式設計實現的方法和經驗。

3ds檔案的格式以及讀入和顯示檔案中模型的一些經驗.

3ds檔案是由許多塊(chunk)組成的(大塊中鑲嵌子塊)。由於至今為止,沒有乙個官方的文獻說明其格式,所以還有很多未知的塊。不過這並不影響我們讀入3ds檔案中的模型。因為我們在讀入時,可以根據自己的需要選擇性地讀入自己需要的塊,而忽略掉那些不感興趣或未知的塊。這正是塊結構給我們帶來的好處。

乙個塊由塊資訊和塊資料組成。塊資訊又由塊的id(兩個位元組長的標識,如4d4d)和塊的長度(四個位元組,其實也就是下乙個塊的偏移位元組數)組成。用vc++以十六進製制方式開啟一3ds檔案可以很清楚的看到其結構。在讀入這種塊結構(大塊中巢狀小塊,而塊的結構固定)的檔案時,完全可以用遞迴的方法實現,而返回上一級(子塊讀完,返回父塊)的條件則是當前已經讀入的塊的位元組數是否等於塊的長度。從父塊轉向讀入其子塊,則可用switch語句實現,通過子塊的id判斷進入哪個分支。

由於在網上有很多現成的這類程式,所以完全可是找乙個類封裝的比較好的程式,將其移植到自己的工程中就行了。當然需要做一些小小的改動,比如根據自己的需要修改其顯示和控制的部分。

全文閱讀:

opengl實現3ds檔案中的模型自由旋轉

OpenGL實現3DS檔案匯入

方法1 使用deep exploration轉換.deep exploration.exe 是乙個相當出色的轉換工具。可以把三維模型匯出成opengl程式 匯出 cpp 檔案的方法如下 打下3d模型 檔案 另存為 cpp 彈出對話方塊 exprot type display list 得到乙個 cp...

3DS檔案的結構

本文 於 zwqxin 其實按我最近的理解,3ds檔案格式,對資料的組織跟記憶體很相像。它分成很多的 chunk 塊 按順序排列。每個chunk都包含著一些資訊,比如頂點啊材質啊燈光啊等等,相應地,就被稱為頂點chunk材質chunk燈光chunk等等,每個chunk都有其功用。每個chunk有其i...

3DS檔案格式

1 讀取規則 3ds檔案的讀取規則如下 位元組 直接讀取 字 先讀低位位元組,後讀高位位元組,如ed 3c讀出後的字為3c ed 雙字 先讀低位字,後讀高位字,如ed 3c 25 43讀出後的雙字為43 25 3c ed 浮點數 直接讀取四個位元組。2 chunk chunk是3ds檔案的基本構成單...