2013-01-13 103 views
2

我的問題是在android.graphics.Camera。在文件約rotate方法,我看到這些評論:旋轉方法之間的區別?

公共無效rotateX(浮度)自:API等級1
應用旋轉 繞X變換軸。


公共無效旋轉(浮動的x,浮Y,浮動z)的自:API等級12
應用旋轉變換圍繞所有三個軸線旋轉。

有我的問題:是什麼使用旋轉(浮點X,浮子ÿ,浮法z)和的旋轉*方法的序列,這兩個片段A和B之間例如差之間的差別:
A)

camera.rotate (x, y, z); 


B)

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

回答

1

的重要性在於旋轉以應用的順序

例如,考慮飛機飛行前它首先在旋轉90度其Z軸(),然後在其X軸上旋轉90度(間距)。結果是飛機現在右翼朝下飛向右邊。現在考慮以相反的順序進行操作,然後以90度的間距跟隨90度的滾動。這架飛機現在飛起來,其右翼指向前方(這些結果可能因您的座標系而異)。

camera.rotate提供了一個快速簡便的功能,可以使用一個函數應用所有三個旋轉。其餘三個輪換功能的原因是爲了允許開發人員想要以特定順序應用一個或多個輪轉的情況。

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)); 
}