gpt4 book ai didi

c++ - 在 C++ 中使用 OpenGL 顶点缓冲区

转载 作者:行者123 更新时间:2023-11-30 03:10:39 25 4
gpt4 key购买 nike

我加载了一个 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 将数据分配给它们时,我是否必须使用冗余数据创建数组,以便它们在相同的空间中都具有相同数量的元素命令?我想知道是否有更简单的方法来使用我已经组织的模型数据的方式来填充缓冲区。

最佳答案

是的,您必须复制顶点,因为 GL 只支持所有顶点属性的一个索引数组。

另一方面,不要使用 double ,只使用 float ,大多数 GPU 不支持它们并将它们转换为 float 。

关于c++ - 在 C++ 中使用 OpenGL 顶点缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2994358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com