我似乎无法弄清楚如何使用我的相机拍摄FPS类型的机芯'使用OpenGL ES。我在屏幕上渲染了一个立方体,我可以通过改变 glTranslatef 函数的第一个和第三个参数来向前/向后和侧向移动。
当我尝试使用 gluLookAt 功能旋转相机时,问题就出现了:
GLU.gluLookAt(gl, 0, getX(), 20, 0, 0, 0, 1, 0, 0);
我的立方体旋转,但它保持在中心位置,它的z位置似乎也略有变化。我需要让它不仅围绕它的轴旋转,而是远离摄像机(通过x轴)(如果立方体面向我并且我旋转90度,立方体将在我的左侧)
有关我做错的任何提示?这是完整的 onDrawFrame
@Override
public void onDrawFrame(GL10 gl)
{
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(1, 0.0f, -12.0f + Core.getInstance().getZ());
GLU.gluLookAt(gl, 0, Core.getInstance().getX(), 20, 0, 0, 0, 1, 0, 0);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer( 3, GL10.GL_FLOAT, 0, vertexBuffer );
gl.glDrawElements( GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_BYTE, indexBuffer );
gl.glDisableClientState( GL10.GL_VERTEX_ARRAY );
}
修改
我几乎设法使用以下代码获得了所需的结果:
float x = 4*(float) Math.cos( angle );
float z = 4*(float) Math.sin( angle );
GLU.gluLookAt
(
gl,
// location
x, 0, z,
// look at
x, 0, z -10,
0, 1, 0
);
gl.glTranslatef(0, 0.0f, distance );
但由于某些原因,旋转仍然有点“关闭”,看起来相机并不完全处于旋转中心,有什么建议吗?