适用于模拟器,而不是电话

时间:2010-06-22 16:55:18

标签: android opengl-es

此代码:

public void onSurfaceChanged(GL10 gl, int w, int h) {

gl.glViewport(0, 0, w, h);// 
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();    
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
// set camera zoom
GLU.gluPerspective(gl, 45.0f,(float) w / h, 0.1f, 100.0f);
// point camera
GLU.gluLookAt(gl, 0, 1, 5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
}
public void onDrawFrame(GL10 gl) {
// clear last frame
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// set model and projection matrices to identity
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0, 1, 5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);    
square.draw(gl);
}

在模拟器(在Android 2.1虚拟设备上)按预期工作但在手机上(HTC Desire Android 2.1)它只是清除屏幕,看不到任何绘制的内容。如果我注释掉

gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0, 1, 5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

它适用于手机,但如果我在onDrawFrame中进行了gluLookAt调用则不行。

onDrawFrame中gluLookAt的问题是什么?

1 个答案:

答案 0 :(得分:0)

您不需要致电

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

每一帧。如果您使用GLU.gluLookAt(),它应该处理所有这些。当然,清除投影矩阵不应该导致任何问题,但也许会有某种优化导致它破裂。如果你注释掉这两行会怎么样?