我正在创建一个应用程序,它应该在场景中的恒定位置绘制对象,但是当我移动手机时,相机应该会改变视图,我应该看到周围的所有对象(当我用手机完全旋转时)。
当我在我的onDrawFrame方法中使用gl.glMultMatrixf(rotationMatrix,0)然后绘制对象时,它的工作完美(旋转矩阵是从SensorManager获得的)
@Override
public void onDrawFrame(GL10 gl) {
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glMultMatrixf(rotationMatrix, 0);
gl.glTranslatef(0f, 0f, -10f);
//draw object
pyramid.draw(gl);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
但是当我尝试使用:
GLU.gluLookAt( gl, 0.0f, 0.0f, 0.0f, x, y, z, 0.0f, 1.0f, 0.0f );
gl.glPushMatrix();
//draw object
pyramid.draw(gl);
我的对象始终位于屏幕上的同一位置,并跟随相机移动。我在第二个例子中做错了什么?
我想你不清楚glulookat()到底做了什么。 您要求一个表示glulookat(currentrotationmatrix,mylocation.x,mylocation.y,mylocation.z,whereImlooking.x,whereImlooking.y,whereImlooking.z,upvector.x,upvector.y,upvector.z)的矩阵。
因此,使用该代码,您告诉opengl旋转所有内容(假设代码仍然存在),然后您说"我在原点(0.0,0.0,0.0)并查看xyz"(不确定xyz在您的案例中是什么。