4

Ogre3dで、方向を設定し、カメラビューに「法線」のベクトル(目の前を指す矢印として)とカメラを回転させる角度(頭を傾けるなど)を指定します。私はそれをこのトリックで動作させることができます:

float angle = 10; /* tilt my head 10 degrees to right */
Vector3 vector(0, 0, 1); /* z axis pointing forward */
Vector3 target = camera->getPosition() + vector;
camera->lookAt(target);
camera->roll(Degree(angle));

これがすべての値で機能するかどうかはわかりませんが、ハッキーのようです。クォータニオンやを使用するなど、より正確なものを探していますOgre::Camera::setOrientation()

この例は機能しません:

Quaternion orientation(Degree(angle), vector);
camera->setOrientation(orientation);

カメラがにangle沿って回転するためvectorです。

4

2 に答える 2

3

ベクトルと角度を、回転を表すクォータニオンに簡単に変換できます。これはよく知られている軸角度クォータニオンです。使用しているQuaternionクラスがわかりません(おそらくOgreに1つあります)。ただし、私が書いたQuaternionクラスのサンプルコードを紹介します。

    Quaternion Quaternion::CreateFromAxisAngle(Vector3 axis, float angle) {
    float half = angle * 0.5f;
    float s = sin(half);

    Quaternion result;
    result.x = axis.x * s;
    result.y = axis.y * s;
    result.z = axis.z * s;
    result.w = cos(half);
    return result;
}
于 2012-12-20T17:26:11.357 に答える