2011-12-05 81 views
0

我有一個文件,它定義了3D模型的頂點,法線和連通性信息。C++ - 讀取3D模型

樣品:

v -2.491060 -2.491060 0.000000 
v 2.491060 -2.491060 0.000000 
v -2.491060 2.491060 0.000000 
v 2.491060 2.491060 0.000000 
vt 0.000000 0.000000 
vt 1.000000 0.000000 
vt 0.000000 1.000000 
vt 1.000000 1.000000 
f 1/1 2/2 3/3 
f 3/3 2/2 4/1 

其中:

v   vertex coordinate (x, y, z position) 
vt  texture coordinate (u, v coordinate) 
f   polygon connectivity information with vertex and texture indices 

什麼是在讀取和存儲這些信息的最佳方式?具有每個頂點和連接信息的內部數組的自定義類/結構?我想我曾經用C++以分隔的方式讀取數據,但它的數據類型是相同的,所以我把它放入一個多維數組中。我應該只使用stringstreams和一個自定義的結構/類也許?

編輯披露,這是我的3D圖形類,但我只是尋求周密這裏,而不是一個完全寫入項目等

+1

¤使用''中的'std :: getline'一次讀入一行。然後用你喜歡的任何東西來解析每一行。一個'std :: istringstream'很容易,但可能效率很低。編寫時您需要一些「自定義類」,例如作爲基本元素類型。但從頭開始儘可能少地發明。而是利用標準庫的容器,例如'vector'和'map'以及C++ 11'array'等等。把它作爲一個目標,在任何地方都沒有任何明確的「新」。乾杯&hth。, –

回答

3

首先有一個事實,你必須將它們存儲在動態陣列。據我所知,波前並不包含任何有關3D-Obj文件中有多少頂點的信息。頂點正常,紋理座標和麪相同。

因此,我傾向於將它們(頂點,法線等)讀入結構中,並在定義三角形後刪除它們。 Stringstreams和自定義結構聽起來不錯,所以你可以使用正則表達式來讀出必要的頂點/面部數據。

我的Java程序員(不要太長),很抱歉,如果我錯了:/

這也許是我的obj裝載機在我的項目有點複雜版本:https://github.com/Chrise55/Llama3D/blob/master/src/llama/zoo1/llgeometry/LLLoadGeometry.java 它的Java ,但也許它可以幫助你? :/