【问题标题】:OpenGL Vertices and indices to wavefront obj波前 obj 的 OpenGL 顶点和索引
【发布时间】:2016-10-21 08:32:06
【问题描述】:

我已经创建了自己的顶点、颜色和索引,它们将使用 openGL 进行渲染。 以下是渲染顶点、颜色和索引的源代码。

//CODES TO SET VBO....
void displayCallback() {    
    glVertexPointer(...);
    glColorPointer(...);
    glDrawElemnts(GL_TRIANGLE_STRIP,...);
}

如您所见,索引将构建为 GL_TRIANGLE_STRIP 并将被渲染。 渲染后,我想保存带有顶点、索引和颜色数据的波前对象文件。

我试图让 .obj 文件撒谎。

for(int i = 0; i < vertexSize; ++i) {
    fprintf(fp, "v %f %f %f\n", vertices[i*3], vertices[i*3+1], vertices[i*3+2]);
}

fprintf("fp, "s 1\n");

for(int i = 0; i < indexSize; ++i) {
    fprintf(fp, "f %d %d %d\n", indices[i*3], indices[i*3+1], indices[i*3+2]);
}

我尝试使用 assimp 查看器重新打开它,(http://www.assimp.org/) 加载失败。 我错过了什么吗?

谢谢。

【问题讨论】:

    标签: c++ opengl wavefront


    【解决方案1】:

    请添加一些简单的示例 obj 文件(如立方体之类的代码),以便我们查看文件中包含的内容。要了解我的意思,请查看:

    我敢打赌,你弄错了指数。

    1. GL_TRIANGLE_STRIP 每个三角形都有1 顶点而不是3

      根据OpenGL docn长度的顶点流将生成n-2三角形GL_TRIANGLE_STRIP

    2. Wavefront obj 文件索引从 1 开始

      所以你很可能从0 开始索引,所以检查一下...并相应地使用+1

    我不知道你的数据结构架构/拓扑,但我认为你的脸应该像这样保存(未测试,因为我没有你的数组/表和模型)放置 #1,#2强>在一起:

    fprintf(fp, "f %d %d %d\n", indices[0]+1, indices[1]+1, indices[2]+1);
    for(int i = 3; i < indexSize; i++) 
     fprintf(fp, "f %d %d %d\n", indices[i-2]+1, indices[i-1]+1, indices[i]+1);
    

    颜色数据

    对于这个波前 obj 在单独的文件 mtl、stl 中使用材质扩展(我不熟悉那些对不起......)但现在 3D 扫描仪直接在 obj 文件中使用未记录的颜色编码(一些观众支持)它是这样做:

    v -5.231932 438.659877 -432.038039 0.000000 1.000000 0.000000
    

    因此,如果顶点具有6 坐标,则第一个3x,y,z,最后一个3r,g,b,因此链接答案中红色的立方体将是

    v -1.0 -1.0 -1.0 1 0 0
    v +1.0 -1.0 -1.0 1 0 0
    v +1.0 +1.0 -1.0 1 0 0
    v -1.0 +1.0 -1.0 1 0 0
    v -1.0 -1.0 +1.0 1 0 0
    v +1.0 -1.0 +1.0 1 0 0
    v +1.0 +1.0 +1.0 1 0 0
    v -1.0 +1.0 +1.0 1 0 0
    
    f 1 2 3 4 
    f 5 6 7 8 
    f 1 2 6 5 
    f 2 3 7 6 
    f 3 4 8 7 
    f 4 1 5 8 
    

    您可以在查看器中尝试检查它是否支持此类编码...我在一些低成本的 3D 扫描仪应用程序上看到它们可以保存此类文件但重新加载后无法呈现颜色。 ..

    【讨论】:

    • 出现问题是因为索引错误,从 0 开始。现在已经解决了。谢谢!
    猜你喜欢
    • 2012-12-18
    • 2013-09-14
    • 2021-05-21
    • 2015-10-29
    • 2014-03-19
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多