2

我的问题是关于.In Docs中的rotate方法,我看到了这些评论:android.graphics.Camera

public void rotateX (float deg) 自:API 级别 1
应用围绕 X 轴的旋转变换。


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

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

camera.rotate (x, y, z);


二)

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

2 回答 2

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 回答
1

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

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

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

于 2013-01-13T07:27:24.723 回答