对于具有3d模型的项目,我获得了一个Autocad文件。我在3ds max中导入了文件并将其导出为.obj文件。到现在为止还挺好。 但是当我将这个文件加载到我的Jogl应用程序中时,我对颜色材料有一个奇怪的问题。更准确地说,请看下面的图像。第一个是来自我的应用程序的截图,第二个截图是加载到3d操作软件中的完全相同的文件的截图。
它看起来如何:
它应该如何:
为了清除,在我的代码中,我使用三角形,对于每个我都有顶点,法线,纹理坐标。所以问题是,缺少什么?
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();
答案 0 :(得分:2)
尝试一些随机的事情:
你的法线已经正常化吗? (如果没有,这可能会导致太亮的光线出现。启用GL_NORMALIZE来修复)
如果禁用纹理并将所有内容绘制成橙色,会发生什么? (只需少担心一个变量)
答案 1 :(得分:0)
根据图像,它看起来像是将错误的正面剔除(用glCullFace
改变)和非常明亮的光线。看到你的绘图代码的其余部分将非常有用。