0

GLKit の CreateFromVectors() に相当するもの (ある場合) を知りたいです。3D グラフィカル プログラミングで非常に優れた機能を果たしているため、そのアイデアが取り残されることはありません。以下をC++からObjective-Cに変換しようとしていますが、これについてC++に触れることはできません。誰か提案はありますか?

m_animation.End = Quaternion::CreateFromVectors(vec3(0, 1, 0), direction);

別名:

inline QuaternionT<T> QuaternionT<T>::CreateFromVectors(const Vector3<T>& v0, const Vector3<T>& v1)
{
    if (v0 == -v1)
        return QuaternionT<T>::CreateFromAxisAngle(vec3(1, 0, 0), Pi);

    Vector3<T> c = v0.Cross(v1);
    T d = v0.Dot(v1);
    T s = std::sqrt((1 + d) * 2);

    QuaternionT<T> q;
    q.x = c.x / s;
    q.y = c.y / s;
    q.z = c.z / s;
    q.w = s / 2.0f;
    return q;
}

翻訳方法も知りたいです:

mat4 rotation(m_animation.Current.ToMatrix());
glMultMatrixf(rotation.Pointer());

ToMatrix() の場合:

inline Matrix3<T> QuaternionT<T>::ToMatrix() const
{
    const T s = 2;
    T xs, ys, zs;
    T wx, wy, wz;
    T xx, xy, xz;
    T yy, yz, zz;
    xs = x * s;  ys = y * s;  zs = z * s;
    wx = w * xs; wy = w * ys; wz = w * zs;
    xx = x * xs; xy = x * ys; xz = x * zs;
    yy = y * ys; yz = y * zs; zz = z * zs;
    Matrix3<T> m;
    m.x.x = 1 - (yy + zz); m.y.x = xy - wz;  m.z.x = xz + wy;
    m.x.y = xy + wz; m.y.y = 1 - (xx + zz); m.z.y = yz - wx;
    m.x.z = xz - wy; m.y.z = yz + wx;  m.z.z = 1 - (xx + yy);
    return m;
}

残念ながら、私はバックエンドの C++ のクラスに慣れておらず、それらがどのように変換されるのかわかりません。

4

0 に答える 0