Beispiel #1
0
        public static warp_Matrix quaternionMatrix(warp_Quaternion quat)
        {
            warp_Matrix m = new warp_Matrix();


            float xx = quat.X * quat.X;
            float xy = quat.X * quat.Y;
            float xz = quat.X * quat.Z;
            float xw = quat.X * quat.W;
            float yy = quat.Y * quat.Y;
            float yz = quat.Y * quat.Z;
            float yw = quat.Y * quat.W;
            float zz = quat.Z * quat.Z;
            float zw = quat.Z * quat.W;

            m.m00 = 1 - 2 * (yy + zz);
            m.m01 = 2 * (xy - zw);
            m.m02 = 2 * (xz + yw);
            m.m10 = 2 * (xy + zw);
            m.m11 = 1 - 2 * (xx + zz);
            m.m12 = 2 * (yz - xw);
            m.m20 = 2 * (xz - yw);
            m.m21 = 2 * (yz + xw);
            m.m22 = 1 - 2 * (xx + yy);

            m.m03 = m.m13 = m.m23 = m.m30 = m.m31 = m.m32 = 0;
            m.m33 = 1;

            return(m);
        }
Beispiel #2
0
        public warp_Matrix rotateMatrix(warp_Quaternion quat)
        {
            reset();

            warp_Matrix temp   = warp_Matrix.quaternionMatrix(quat);
            warp_Matrix result = warp_Matrix.multiply(this, temp);

            return(result);
        }
Beispiel #3
0
        public bool RotateScene(warp_Quaternion quat, float x, float y, float z)
        {
            if (_scene == null)
            {
                return(false);
            }

            _scene.rotate(quat, x, y, z);

            return(true);
        }
Beispiel #4
0
        public bool RotateScene(warp_Quaternion quat)
        {
            if (_scene == null)
            {
                return(false);
            }

            _scene.rotate(quat);

            return(true);
        }
        static public warp_Quaternion matrix(warp_Matrix xfrm)
        {
            warp_Quaternion quat = new warp_Quaternion();
            // Check the sum of the diagonal
            float tr = xfrm[0, 0] + xfrm[1, 1] + xfrm[2, 2];

            if (tr > 0.0f)
            {
                // The sum is positive
                // 4 muls, 1 div, 6 adds, 1 trig function call
                float s = ( float )Math.Sqrt(tr + 1.0f);
                quat.W = s * 0.5f;
                s      = 0.5f / s;
                quat.X = (xfrm[1, 2] - xfrm[2, 1]) * s;
                quat.Y = (xfrm[2, 0] - xfrm[0, 2]) * s;
                quat.Z = (xfrm[0, 1] - xfrm[1, 0]) * s;
            }
            else
            {
                // The sum is negative
                // 4 muls, 1 div, 8 adds, 1 trig function call
                int[] nIndex = { 1, 2, 0 };
                int   i, j, k;
                i = 0;
                if (xfrm[1, 1] > xfrm[i, i])
                {
                    i = 1;
                }
                if (xfrm[2, 2] > xfrm[i, i])
                {
                    i = 2;
                }
                j = nIndex[i];
                k = nIndex[j];

                float s = ( float )Math.Sqrt((xfrm[i, i] - (xfrm[j, j] + xfrm[k, k])) + 1.0f);
                quat[i] = s * 0.5f;
                if (s != 0.0)
                {
                    s = 0.5f / s;
                }
                quat[j] = (xfrm[i, j] + xfrm[j, i]) * s;
                quat[k] = (xfrm[i, k] + xfrm[k, i]) * s;
                quat[3] = (xfrm[j, k] - xfrm[k, j]) * s;
            }

            return(quat);
        }
Beispiel #6
0
        public bool RotateSelf(string name, warp_Quaternion quat)
        {
            if (_scene == null)
            {
                return(false);
            }

            warp_Object o = _scene.sceneobject(name);

            if (o == null)
            {
                return(false);
            }

            o.rotateSelf(quat);

            return(true);
        }
Beispiel #7
0
 public void rotateSelf(warp_Quaternion quat)
 {
     preTransform(rotateMatrix(quat));
 }
Beispiel #8
0
 public void rotate(warp_Quaternion quat, float x, float y, float z)
 {
     transform(rotateMatrix(quat));
 }
 public void rotateSelf(warp_Quaternion quat)
 {
     matrix.rotateSelf(quat);
     normalmatrix.rotateSelf(quat);
 }
 public void rotate(warp_Quaternion quat, float x, float y, float z)
 {
     matrix.rotate(quat, x, y, z);
     normalmatrix.rotate(quat, x, y, z);
 }