我有一个简单的opengl应用程序,可以渲染任意3d对象。在模拟器上工作得很好。在我的关系上,不太好。
渲染模型,但它在远z中几乎没有被剪裁。我使用模型的边界球直径作为我的远Z值。代码似乎很漂亮,它包含在下面以供参考。
问题必须是调用gluPerspective(),但我无法理解设备之间会有什么不同。唯一的区别是宽高比略微不同。我努力将farZ的值编码为真正大的东西并修复了问题。任何想法?
感谢。
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0f, 0f, 2f*mesh.diameter, 0f, 0f, 0f, 0f, 1f, 0f);
gl.glPushMatrix();
gl.glRotatef(mesh.rx, 1, 0, 0);
gl.glRotatef(mesh.ry, 0, 1, 0);
mesh.draw(gl);
gl.glPopMatrix();
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
float zNear = 0.1f;
float zFar = zNear + mesh.diameter;
float aspect = (float) width / (float) height;
float left = mesh.mid.x - mesh.diameter;
float right = mesh.mid.x + mesh.diameter;
float bottom = mesh.mid.y - mesh.diameter;
float top = mesh.mid.y + mesh.diameter;
/*
if (aspect < 1.0) { // window taller than wide
bottom /= aspect;
top /= aspect;
} else {
bottom *= aspect;
top *= aspect;
}
*/
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 90.0f, aspect, zNear, zFar);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(left, right, bottom, top, zNear, zFar);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
答案 0 :(得分:0)
简单地增加zFar解决了这个问题。我仍然没有解释为什么一个zFar在模拟器上工作但没有在设备上工作。