此代码:
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的问题是什么?
答案 0 :(得分:0)
您不需要致电
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
每一帧。如果您使用GLU.gluLookAt()
,它应该处理所有这些。当然,清除投影矩阵不应该导致任何问题,但也许会有某种优化导致它破裂。如果你注释掉这两行会怎么样?