gluLook不会旋转相机'

时间:2015-08-18 11:24:49

标签: java android opengl-es

我似乎无法弄清楚如何使用我的相机拍摄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 ); 

但由于某些原因,旋转仍然有点“关闭”,看起来相机并不完全处于旋转中心,有什么建议吗?

0 个答案:

没有答案