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 仅支持所有顶点属性的一个索引数组。

另一方面,不要使用双精度,只使用浮点数,大多数 GPU 不支持它们并将它们转换为浮点数。

于 2010-06-08T03:25:13.357 回答