【问题标题】:OpenGL obj file not rendering right in JOGLOpenGL obj 文件无法在 JOGL 中正确渲染
【发布时间】:2012-10-30 01:05:17
【问题描述】:

我正在使用 JOGL 在 Java 中构建一个简单的 Wavefront Obj 文件加载器和渲染器。然而,每当我加载一个简单的兔子测试网格时,它的渲染方式就会出现故障,我不知道是什么原因造成的。我只使用几何顶点和法线,没有纹理或材质。

以下是init()方法的GL初始化代码:

gl.setSwapInterval(1);
gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f);        
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glDepthFunc(GL2.GL_LESS);
gl.glEnable(GL2.GL_CULL_FACE);
gl.glCullFace(GL2.GL_BACK);
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glClearDepth(1.0d);

这是我用来渲染模型的方法(目前是固定管道):

 gl.glBegin(GL2.GL_TRIANGLES);
    for(Face face : master.faces) {
        for(int i = 0; i < face.points.length; i++) {
            gl.glNormal3f(face.normals[i].x, face.normals[i].y, face.normals[i].z);             
            gl.glVertex3f(face.points[i].x, face.points[i].y, face.points[i].z);
        }
    }
    gl.glEnd();

其中master 是包含所有面和顶点的主要“组”。我已经检查过了——所有的东西都进入了主组,并且 glNormal3f 和 glVertex3f 被每个三角形中每个需要的顶点调用。

谁能说出导致这些故障的原因?

编辑 1:

这是我用来设置投影和模型视图矩阵的代码:

float aspect = (float) width / (float) height;

gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();

glu.gluPerspective(60.0f, aspect, 0.01f, 100.0f);
glu.gluLookAt(2.0f, 1.0f, 1.5f,
        0.0f, 0.0f, 0.0f,
        0.0f, 1.0f, 0.0f);

gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();

【问题讨论】:

  • 首先,你确定你在 obj 文件中定义的所有面都是三角形(Wavefront obj 支持任意面大小)吗?
  • @pwny 是的,我很确定!出于调试目的,我只允许定义三角形面
  • 您的投影和模型视图矩阵设置代码在哪里?上下文创建?
  • genpfault:我已经更新了问题;至于上下文创建,没有使用特殊代码; JOGL 自动处理基础知识。

标签: java opengl graphics jogl wavefront


【解决方案1】:

尝试删除 gl.glDepthFunc(GL2.GL_LESS); gl.glClearDepth(1.0d);

【讨论】:

  • 这没有帮助,它的渲染仍然很糟糕
  • gl.glCullFace(GL2.GL_FRONT);?
  • 嗯,这使它看起来更好一些,但它仍然只渲染了一半的网格,并且一些工件仍然存在。
  • 可能是法线向量被破坏了?尝试使用 Blender 打开并修复法线
  • 我看到兔子是标准模型...但可能是来源错误...也尝试禁用剔除
【解决方案2】:

嗯,这似乎是由我的对象加载器中的一个愚蠢的小错误引起的。 在解析我的输入顶点时,它会切掉几何顶点的所有 x 坐标的第一个字符。这不会影响正值,因为它们都被归一化并且0.43 = .43,但是它弄乱了所有负值,导致它们被解释为正值。

我花了一段时间才弄明白,但我最终找到了它,这表明最微小的错误可能非常难以追踪。

【讨论】:

    猜你喜欢
    • 2012-09-13
    • 2012-05-22
    • 2021-04-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多