2

私の質問は、.Docsのrotateメソッドについてです。私はこれらのコメントを見ました:android.graphics.Camera

public void rotateX(float deg)以降:APIレベル
1X軸を中心に回転変換を適用します。


public void rotate(float x、float y、float z)以降:APIレベル
123つの軸すべての周りに回転変換を適用します。

私の質問があります:rotate(float x、float y、float z)と一連のrotate *メソッドの違いは何ですか?たとえば、これら2つのスニペットAとBの違い:
A)

camera.rotate (x, y, z);


B)

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

2 に答える 2

1

重要なのは、回転が適用される順序にあります。

たとえば、最初にZ軸(ロール)を中心に90度回転し、次にX軸(ピッチ)を中心に90度回転する航空機が前方に飛行しているとします。その結果、航空機は右翼を下に向けて右に飛行しています。ここで、90度のピッチの後に90度のロールが続く逆の順序での操作を検討します。航空機は現在、右翼を前に向けて飛行しています(これらの結果は、座標系によって異なる場合があります)。

camera.rotateは、1つの関数を使用して3つの回転すべてを適用するためのすばやく簡単な関数を提供します。残りの3つのローテーション関数の理由は、開発者が1つ以上のローテーションを特定の順序で適用したい状況を考慮に入れるためです。

于 2013-01-13T07:27:24.723 に答える
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));
}
于 2013-01-13T07:24:45.483 に答える