1

Wavefront .obj ファイルを読み込んでイミディエイト モードで描画したところ、正常に動作しました。
同じモデルを頂点バッファで描画しようとしていますが、質問があります。

私のモデルデータは、次の構造で編成されています。

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 を使用してそれらにデータを割り当てる場合、それらがすべて同じ順序で同じ数の要素を持つように、冗長データを含む配列を作成する必要がありますか? モデルのデータを整理した方法でバッファを埋める簡単な方法があるかどうかを知りたいです。

4

1 に答える 1

3

はい、GL はすべての頂点属性に対して 1 つのインデックス配列しかサポートしないため、頂点を複製する必要があります。

一方、double は使用せず、float のみを使用してください。ほとんどの GPU はそれらをサポートしておらず、float に変換します。

于 2010-06-08T03:25:13.357 に答える