我正在创建一个应用程序,它应该在场景中的恒定位置绘制对象,但是当我移动手机时,相机应该更改视图,我应该看到所有对象(当我用手机完全旋转时)。
当我在我的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);
我的物体一直在屏幕上的同一个地方,并跟随相机移动。我在第二个例子中做错了什么?
答案 0 :(得分:0)
我认为你不清楚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在你的情况下。或者你想要达到的效果。)