2010-06-08 94 views
1

我已經加載了一個Wavefront .obj文件並在即時模式下繪製它,並且它工作正常。
我現在試圖繪製與頂點緩衝區相同的模型,但我有一個問題。在C++中使用OpenGL頂點緩衝區

我的模型數據被組織在以下結構:

struct Vert 
{ 
double x; 
double y; 
double z; 
}; 

struct Norm 
{ 
double x; 
double y; 
double z; 
}; 

struct Texcoord 
{ 
double u; 
double v; 
double w; 
}; 

struct Face 
{ 
unsigned int v[3]; 
unsigned int n[3]; 
unsigned int t[3]; 
}; 

struct Model 
{ 
unsigned int vertNumber; 
unsigned int normNumber; 
unsigned int texcoordNumber; 
unsigned int faceNumber; 

Vert * vertArray; 
Norm * normArray; 
Texcoord * texcoordArray; 
Face * faceArray; 
}; 

因爲它是現在,我不認爲有任何冗餘數據,因爲多面結構可以指向同一個頂點,正常,或紋理座標。

當我使用vbo的頂點位置,法線和紋理座標,並使用glBufferData爲它們分配數據時,是否必須使數組具有冗餘數據,以便它們將具有相同數量的元素同樣的順序?我想知道是否有一種更簡單的方式來填充緩衝區,並且已經組織了模型的數據。

+0

作爲對'Model'結構的評論:你可以使用'std :: vector'而不是原始數組。將'&v [0]'而不是數組指針傳遞給適當的gl函數。向量保證與數組的行爲完全相同 - 只要您不調整它的大小,這樣做會使迭代器和指針無效。 – greyfade 2010-06-08 04:39:02

回答

3

是的,你必須複製頂點,因爲GL只支持所有頂點屬性的一個索引數組。

另一方面,不要使用雙打,只使用浮動,大多數GPU不支持它們,並將它們轉換爲浮動。