示例#1
0
    /*
     * Rotate this transform around the vector specified by [x], [y], [z].
     * If [local] is true, perform in local space, otherwise perform in world space. If
     * world space is used, it takes into account the  aggregated transform of the scene
     * object's ancestors.
     */
    void SceneObjectTransform::Rotate(Real x, Real y, Real z, Real a, Bool local) {
        if (!local) {
            Matrix4x4 rotMat;
            rotMat.PreRotate(x, y, z, a);
            Transform worldTrans;
            worldTrans.SetTo(rotMat);

            Transform localTrans;
            GetLocalTransformationFromWorldTransformation(worldTrans, localTrans);

            this->TransformBy(localTrans);
        }
        else {
            Transform::Rotate(x, y, z, a, true);
        }
    }
示例#2
0
    /*
    * Rotate around a specific point and orientation vector.
    *
    * The point is specified by [px], [py], and [pz].
    *
    * The orientation vector is specified by [ax], [ay], and [az].
    *
    * The parameter [local] determines whether local or world space is used.
    * If world space is used, it takes into account the  aggregated transform
    * of the scene object's ancestors.
    */
    void SceneObjectTransform::RotateAround(Real px, Real py, Real pz, Real ax, Real ay, Real az, Real angle, Bool local) {
        if (!local) {
            Matrix4x4 worldTransMat;
            worldTransMat.PreTranslate(-px, -py, -pz);
            worldTransMat.PreRotate(ax, ay, az, angle);
            worldTransMat.PreTranslate(px, py, pz);
            Transform worldTrans;
            worldTrans.SetTo(worldTransMat);

            Transform localTrans;
            GetLocalTransformationFromWorldTransformation(worldTrans, localTrans);

            this->TransformBy(localTrans);
        }
        else {
            Transform::RotateAround(px, py, pz, ax, ay, az, angle, true);
        }
    }