我终于想出了如何从.obj文件获取数据,并将顶点位置x,y,z存储到名为Points
的结构中,其成员types为float
。 我想知道如何将这些数据放到屏幕上。
这是我的尝试:
//make a fileobject and store list and the index of that list in ac string ifstream file (list[index].c_str() ); std::vector<int>faces; std::vector<Point>points; points.push_back(Point()); Point p; int face[4]; while ( !file.eof() ) { char modelbuffer[10000]; //Get lines and store it in line string file.getline(modelbuffer, 10000); switch(modelbuffer[0]) { case 'v' : sscanf(modelbuffer, "v %f %f %f", &p.x, &p.y, &p.z); points.push_back(p); cout << "Getting Vertex Positions" << endl; cout << "v" << px << endl; cout << "v" << py << endl; cout << "v" << pz << endl; break; case 'f': sscanf(modelbuffer, "f %d %d %d %d", face, face+1, face+2, face+3 ); cout << face[0] << endl; cout << face[1] << endl; cout << face[2] << endl; cout << face[3] << endl; faces.push_back(face[0]); faces.push_back(face[1]); faces.push_back(face[2]); faces.push_back(face[3]); } GLuint vertexbuffer; glGenBuffers(1, &vertexbuffer); glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); glBufferData(GL_ARRAY_BUFFER, points.size(), points.data(), GL_STATIC_DRAW); //glBufferData(GL_ARRAY_BUFFER,sizeof(points), &(points[0]), GL_STATIC_DRAW); glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0); glVertexPointer(3, GL_FLOAT, sizeof(points),points.data()); glIndexPointer(GL_DOUBLE, 0, faces.data()); glDrawArrays(GL_QUADS, 0, points.size()); glDrawElements(GL_QUADS, faces.size(), GL_UNSIGNED_INT, faces.data()); }
正如你所看到的,我显然已经失败了,但是我真的不知道为什么它不把数据渲染到视锥体上? 有没有人有这个解决scheme?
我会留下我的其他答案,因为我认为这是更有价值的一般建议,人们可以分开考虑。
在代码中查看更多细节引发了以下问题,在获得工作代码之前,所有这些问题都需要得到解答。
所有这些我在15分钟内find了OpenGL函数参考。 我想你会更好的服务,回头再看几个教程,说明使用顶点/索引数组和其他基本GL函数,然后再跳转到试图编写.OBJ渲染器。 另外,我建议谷歌search其他现有的OpenGL .OBJ实现(其中必须有几十),以供参考。
在任何情况下,我有一些裸露的骨骼几何渲染,但没有真正的基础设施,这是一些简单明了的东西,几何渲染部分实际上是罚款。 检查: