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爲它們分配數據時,是否必須使數組具有冗餘數據,以便它們將具有相同數量的元素同樣的順序?我想知道是否有一種更簡單的方式來填充緩衝區,並且已經組織了模型的數據。
作爲對'Model'結構的評論:你可以使用'std :: vector'而不是原始數組。將'&v [0]'而不是數組指針傳遞給適當的gl函數。向量保證與數組的行爲完全相同 - 只要您不調整它的大小,這樣做會使迭代器和指針無效。 – greyfade 2010-06-08 04:39:02