Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在模拟器上工作,而不是在电话上_Android_Opengl Es - Fatal编程技术网

Android 在模拟器上工作,而不是在电话上

Android 在模拟器上工作,而不是在电话上,android,opengl-es,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,

此代码:

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);
}
在模拟器(安卓2.1虚拟设备)上按预期工作,但在手机(HTC Desire安卓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有什么问题?

您不需要调用

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

每一帧。如果您使用的是
GLU.gluLookAt()
它应该可以处理所有这些。当然,清除投影矩阵不应该引起任何问题,但可能有某种优化正在进行,导致它崩溃。如果您注释掉这两行会发生什么?

谢谢CaseyB,但是注释掉这些行没有什么区别-仍然可以在emulator上工作,在phone上没有绘制任何内容,但是如果我在onSurfaceDraw中再次调用gluPerspective,它可以在emulator和phone上正确工作。IOW:grawFrame(GL10 gl){gl.glClear(GL10.gl_COLOR_BUFFER_BIT}GL10.gl_DEPTH_BUFFER_BIT);gl.glMatrixMode(GL10.gl_MODELVIEW);gl.glLoadIdentity();GLU.GLU透视图(gl,45.0f,比率,0.1f,100.0f);GLU.GLU透视图(gl,0,0,1,5,0f,0f,0f,0f,0f,0.0f,0.0f,0.0f);gl.gl.gl.gl.gl.gl.gl.gl.gl.gl.gl.gl.gl.gl.gl这很好。这意味着手机在调用onSurfaceDraw时会松开查看截头台设置,但不会。这怎么可能?