2009-05-28 104 views
4

藝術家朋友向我發送了一個由3DS Max 2009導出的.obj文件,其中包含三個紋理座標作爲vt命令的參數。根據.obj規範,這是正確的。但是,我不確定如何映射爲常規2D .jpg紋理提供的U-V-W座標。將Wavefront .obj的vt映射到OpenGL紋理座標

這對我來說比較重要,因爲我已經玩過3DS Max試圖找出如何強制它導出U-V座標,但似乎沒有直接的方法。在這種情況下,這只是一個天空盒,但在其他情況下,它可能更復雜一些,而不是手動修復。

謝謝!

回答

8

有解釋的文章What Is UVW Mapping?在一節:

你可能會問,爲什麼你需要一個 深度座標像W代表一個二維平面 。原因之一是因爲 有時可以將 翻轉爲地圖的方向,相對於 其幾何。要做到這一點,你需要第三個座標 。 W座標 對於三維 程序性材料也有意義。

在你的情況,你可以簡單地忽略在W協調和只讀與vt開頭的行的前兩個浮動。這假定你不擔心W座標所佔用的額外空間,因爲.obj是一個相當低效的文件格式。

就我個人而言,我不喜歡在OpenGL中使用.obj,因爲它提供了每個人臉而不是每個頂點的頂點法線。要正確點亮對象,必須重複頂點或通過平均周圍的頂點法線來計算法線。如果您想探索更高效的替代方案,請查看二進制格式,例如徹底記錄的.md2格式。如果您尚未使用glDrawElements,請考慮使用glDrawElements。

+0

謝謝!我正在使用頂點數組+顯示列表(空間模擬需要很少的動畫)。只要你編輯一個小東西,我就會將你的答案標記爲已接受:你錯在於.obj不提供VERTEX NORMALS :-)參見「v」命令和在「f」中使用頂點法線:你指定每個頂點的法線,而不是每個面。在這種情況下,你將.obj與.3ds混合在一起。此外,我現在要與.obj一起,但稍後我會進行其他轉換。也許我甚至會使用.obj作爲中間格式:另一個理解它的所有細節的理由。 – 2009-06-02 09:40:36

3

對不起,如果我誤解你的問題。但是你不能簡單地忽略第三個參數w? 據我所知,w只是一個與u和v描述的平面垂直的平面中的座標,所以它對於簡單的2d紋理映射很少需要。

希望這有助於。

+0

這也是我理解它的方式,但是它可能包含更多的語義信息。否則,爲什麼要導出它,如果它清晰可見,那麼它就是2D映射,就像3ds max 2009一樣? – 2009-05-31 16:56:31