在OpenGL ES 2.0 / 3.0中,摄像机围绕倾斜轨道中的对象旋转

问题描述

要沿横轴(X)围绕对象旋转相机,请使用以下代码

private float k = 0f;
...
@Override
public void onDrawFrame(GL10 gl) {
    // Math.PI * 2 - full rotation
    k = (k >= Math.PI * 2) ? 0.0f : k + 0.01f; // gradually rotate the camera
    float radius = 2.6f;

    float x = (float) (radius * Math.cos(k));
    float z = (float) (radius * Math.sin(k));
    Matrix.setLookAtM(viewMatrix,x,z,0f,1.0f,0.0f);
    ...
}

要沿纵轴(Y)围绕对象旋转相机,

...
float y = (float) (radius * Math.cos(k));
float z = (float) (radius * Math.sin(k));
Matrix.setLookAtM(viewMatrix,y,0.0f);
...

但是我不明白如何沿着倾斜轴围绕物体旋转相机。在这种情况下,x,y,z的比例是多少?

感谢您的任何评论/回复

注意:对象的中心与相机所看的点(0,0)一致。

解决方法

找到了这个解决方案:

@Override
public void onSurfaceCreated(GL10 gl,EGLConfig config) {
    ...
    Matrix.setLookAtM(viewMatrix,0f,5f,1.0f,0.0f);
}

@Override
public void onDrawFrame(GL10 gl) {
    Matrix.rotateM(viewMatrix,angle1,x:1,y:0,z:0);
    Matrix.rotateM(viewMatrix,angle2,x:0,y:1,z:0);
    ...
}