旋转方法的区别?

时间:2013-01-13 07:07:15

标签: android canvas camera

我的问题在于rotate中关于android.graphics.Camera方法的问题。在文档中,我看到了这些评论:

  

public void rotateX (float deg)从:API级别1   应用轮换   围绕X轴进行变换。


  

public void rotate (float x,float y,float z)因为:API Level 12
  围绕所有三个轴应用旋转变换。

我的问题是:使用旋转(float x,float y,float z)和一系列 rotate * 方法之间有什么区别,例如区别这两个片段A和B:
A)

camera.rotate (x, y, z);


B)

camera.rotateX (x);
camera.rotateY (y);
camera.rotateZ (z);

2 个答案:

答案 0 :(得分:1)

查看frameworks/base/core/jni/android/graphics/Camera.cpp中的来源,没有区别:

static void Camera_rotate(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) {
    Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
    v->rotateX(SkFloatToScalar(x));
    v->rotateY(SkFloatToScalar(y));
    v->rotateZ(SkFloatToScalar(z));
}

答案 1 :(得分:1)

重要性在于应用旋转的顺序。

例如,考虑向前飞行的飞机,其首先在其Z轴上旋转90度( roll ),然后在其X轴上旋转90度(俯仰)。结果是飞机现在向右飞行,右翼向下。现在考虑以90度俯仰然后90度滚动的相反顺序操作。飞机正在飞行,右翼指向前方(这些结果可能因坐标系统而异

)。

camera.rotate提供了一种快速简便的功能,可以使用一个功能应用所有三个旋转。其余三个旋转功能的原因是允许开发人员想要按特定顺序应用一个或多个旋转的情况。