JOGL:使用obj模型的颜色材质的奇怪行为

时间:2012-01-15 19:26:08

标签: java opengl textures jogl

对于具有3d模型的项目,我获得了一个Autocad文件。我在3ds max中导入了文件并将其导出为.obj文件。到现在为止还挺好。 但是当我将这个文件加载到我的Jogl应用程序中时,我对颜色材料有一个奇怪的问题。更准确地说,请看下面的图像。第一个是来自我的应用程序的截图,第二个截图是加载到3d操作软件中的完全相同的文件的截图。

它看起来如何:

How it looks like

它应该如何:

How it should look like

为了清除,在我的代码中,我使用三角形,对于每个我都有顶点,法线,纹理坐标。所以问题是,缺少什么?

gl.glNewList(1, gl.GL_COMPILE);
        for (int i = 0; i < len; i=i+3) {

            gl.glBegin(GL.GL_TRIANGLES);

            gl.glTexCoord2f(body.body_textCoords[i][0], body.body_textCoords[i][1]);
            gl.glNormal3f(body.body_normal[i][0], body.body_normal[i][1], body.body_normal[i][2]);
            gl.glVertex3f(body.body_vertex[i][0], body.body_vertex[i][1], body.body_vertex[i][2]);

            gl.glTexCoord2f(body.body_textCoords[i+1][0], body.body_textCoords[i+1][1]);
            gl.glNormal3f(body.body_normal[i+1][0], body.body_normal[i+1][1], body.body_normal[i+1][2]);
            gl.glVertex3f(body.body_vertex[i+1][0], body.body_vertex[i+1][1], body.body_vertex[i+1][2]);

            gl.glTexCoord2f(body.body_textCoords[i+2][0], body.body_textCoords[i+2][1]);
            gl.glNormal3f(body.body_normal[i+2][0], body.body_normal[i+2][1], body.body_normal[i+2][2]);
            gl.glVertex3f(body.body_vertex[i+2][0], body.body_vertex[i+2][1], body.body_vertex[i+2][2]);
            gl.glEnd();
        }
gl.glEndList();

2 个答案:

答案 0 :(得分:2)

尝试一些随机的事情:

你的法线已经正常化吗? (如果没有,这可能会导致太亮的光线出现。启用GL_NORMALIZE来修复)

如果禁用纹理并将所有内容绘制成橙色,会发生什么? (只需少担心一个变量)

答案 1 :(得分:0)

根据图像,它看起来像是将错误的正面剔除(用glCullFace改变)和非常明亮的光线。看到你的绘图代码的其余部分将非常有用。

相关问题