有些面部渲染不正确

时间:2014-05-07 17:16:11

标签: opengl glut

我是OpenGL的新手,我试图为我的学士论文导入一个OBJ文件。 原则上它是有效的,但遗憾的是面部存在问题 我第一次看到使用一个大的obj文件(约15.000个顶点) - 其中一些不能正确渲染。 我已经尝试用

修复它
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);

但它虽然没有奏效。

对此感到沮丧,我写了一个简单的立方体模型对象文件。 (参见下面链接中的quader.obj)

我尝试用我的" Load" -function导入它(参见ModelObj.h和ModelObj.cpp) 但是根据物体的位置,有一些面孔缺失。

(立方体的图像,ModelObj-class和quader.obj都压缩here)。

加载顶点后,显示功能的导入如下所示:

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT,    0, obj.getFaces());
glNormalPointer(GL_FLOAT, 0, obj.getNormals());
glDrawArrays(GL_TRIANGLES, 0, obj.getTotalConnTriangles() );
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);

注意:我也试过渲染相同的简单立方体"手动"通过创建多边形 在我的显示功能中,它工作正常。

那么问题是什么?在哪里?

2 个答案:

答案 0 :(得分:1)

我对您的代码有一些评论可能会导致错误的渲染

  
      
  1. glVertexPointer再次检查参数。我记得你需要以下参数。

         

    尺寸:一个顶点的点数

         

    类型:点的类型(例如GL_FLOAT)

         

    步幅:一个顶点和下一个顶点之间有多少字节(如果在同一个数组中存储颜色则交错)

         

    指针:指向第一个顶点的指针(如果你的数组看起来像xyzxyzxyz那么它应该是0)

  2.   
  3. 与glNormalPointer相同 - 检查参数

  4.   

对于1和2我认为你的obj.getFaces()和obj.getNormals()是错误的

第三件事是你的渲染电话

  

glDrawArrays(GL_TRIANGLES,0,obj.getTotalConnTriangles());

当您将很多顶点作为输入时,您没有说明有多少个三角形,但是您说要渲染多少个标记,因此您应该说

  

obj.getTotalConnTriangles()* 3

答案 1 :(得分:1)

我得到了解决方案: 好吧 - 渲染过程中没有任何问题 - 这是因为 面部定义中顶点数的顺序。 通常你需要顶点顺时针(想象三角形的顶视图) 如果你将它们与逆时针面部定义混合在一起,OpenGL将在另一面构建表面。 HTH