gpt4 book ai didi

c++ - 在 openGL 中加载 obj 文件

转载 作者:行者123 更新时间:2023-11-30 02:34:12 24 4
gpt4 key购买 nike

<分区>

我是 OpenGL 的新手,我正在尝试将 obj 文件加载到我的代码中。我有一个简单的动画立方体代码。当我如下声明顶点和索引时,它可以正常工作:

GLfloat cube_vertices[] = {
// front
-1.0, -1.0, 1.0,
1.0, -1.0, 1.0,
1.0, 1.0, 1.0,
-1.0, 1.0, 1.0,
// back
-1.0, -1.0, -1.0,
1.0, -1.0, -1.0,
1.0, 1.0, -1.0,
-1.0, 1.0, -1.0,
};
GLushort cube_elements[] = {
// front
0, 1, 2,
2, 3, 0,
// top
1, 5, 6,
6, 2, 1,
// back
7, 6, 5,
5, 4, 7,
// bottom
4, 0, 3,
3, 7, 4,
// left
4, 5, 1,
1, 0, 4,
// right
3, 2, 6,
6, 7, 3,
};

但是,当我试图从文件中获取相似的数字时,程序运行时没有错误,但窗口中什么也没有显示。这是我加载 obj 文件的代码:

vector<GLfloat> vertices;
vector<GLushort> elements;

ifstream in("cube.obj", ios::in);
if (!in)
{
cerr << "Cannot open " << "sample.obj" << endl; exit(1);
}

string line;
while (getline(in, line))
{
if (line.substr(0, 2) == "v ")
{
istringstream s(line.substr(2));
GLfloat v;
s >> v; vertices.push_back(v);
s >> v; vertices.push_back(v);
s >> v; vertices.push_back(v);

}
else if (line.substr(0, 2) == "f ")
{
istringstream s(line.substr(2));
GLushort a, b, c;
s >> a; s >> b; s >> c;
elements.push_back(a); elements.push_back(b); elements.push_back(c);
}
}

cube.obj文件保存如下:

o cube
v -1.0 -1.0 1.0
v 1.0 -1.0 1.0
v 1.0 1.0 1.0
v -1.0 1.0 1.0
v -1.0 -1.0 -1.0
v 1.0 -1.0 -1.0
v 1.0 1.0 -1.0
v -1.0 1.0 -1.0
f 0 1 2
f 2 3 0
f 1 5 6
f 6 2 1
f 7 6 5
f 5 4 7
f 4 0 3
f 3 7 4
f 4 5 1
f 1 0 4
f 3 2 6
f 6 7 3

我只是在输出中得到一个空白窗口。您知道为什么加载器不工作吗?

我这样上传数据

glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), &vertices, GL_STATIC_DRAW);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), &elements, GL_STATIC_DRAW);

当我没有将 & 运算符放在 verticeselements 之前时,它会给出“没有合适的转换”的编译错误。

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