波前obj

时间:2016-06-20 07:13:05

标签: c++ opengl wavefront

我创建了自己的顶点,颜色和索引,这些顶点,颜色和索引将使用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/)无法加载。 我错过了什么吗?

感谢。

1 个答案:

答案 0 :(得分:2)

请添加一些简单的示例obj文件(像多维数据集一样的代码),以便我们可以看到文件中包含的内容。要看看我的意思,请看一下:

我敢打赌你错了指数。

  1. GL_TRIANGLE_STRIP每个三角形的1个顶点不是3

    根据OpenGL doc n长度的顶点流将生成n-2的{​​{1}}个三角形。

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

    因此,您最有可能从GL_TRIANGLE_STRIP建立索引,因此请检查...并相应地使用0

  3. 我不知道您的数据结构体系结构/拓扑结构,但在我看来,您的面孔应该像这样保存(未经测试,因为我没有您的数组/表和模型)推出#1,#2 一起:

    +1

    颜色数据

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

    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);
    

    因此,如果顶点具有v -5.231932 438.659877 -432.038039 0.000000 1.000000 0.000000 坐标,则第一个63,而最后x,y,z3,因此以红色显示的链接答案的多维数据集将< / p>

    r,g,b

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