Beispiel #1
0
        public static Matrix4x4d TranslateRotateScale(Vector3d t, Vector4d q, Vector3d e)
        {
            Matrix4x4d mt = Translate(t.X, t.Y, t.Z);
            Matrix4x4d mr = RotateQuat(q);
            Matrix4x4d me = Scale(e.X, e.Y, e.Z);

            // mt * mr * me
            Matrix4x4d m = mt;

            m.Mul(mr);
            m.Mul(me);
            return(m);
        }
Beispiel #2
0
        /// <summary>
        ///     Crea una matriz con la traslacion, rotacion y escala.
        /// </summary>
        /// <param name="tx">Traslacion x.</param>
        /// <param name="ty">Traslacion y.</param>
        /// <param name="tz">Traslacion z.</param>
        /// <param name="rx">Angulo en radianes x respecto al plano YZ.</param>
        /// <param name="ry">Angulo en radianes y respecto al plano XZ.</param>
        /// <param name="rz">Angulo en radianes z respecto al plano XY.</param>
        /// <param name="ex">Escala x.</param>
        /// <param name="ey">Escala y.</param>
        /// <param name="ez">Escala z.</param>
        /// <returns>Matriz de escala, rotacion y traslacion.</returns>
        public static Matrix4x4d TranslateRotateScale(
            double tx, double ty, double tz,
            double rx, double ry, double rz,
            double ex, double ey, double ez)
        {
            Matrix4x4d mt = Translate(tx, ty, tz);
            Matrix4x4d mr = Rotate(rx, ry, rz);
            Matrix4x4d me = Scale(ex, ey, ez);

            // mt * mr * me
            Matrix4x4d m = mt;

            m.Mul(mr);
            m.Mul(me);
            return(m);
        }
Beispiel #3
0
        /// <summary>
        ///     Crea una matriz que coloca la camara en <c>posicion</c> mirando en direccion <c>dir</c>.
        ///     La direccion <c>up</c> marca la coordenada Y.
        /// </summary>
        /// <param name="eye">Posicion de la camara.</param>
        /// <param name="dir">Direccion a la que mira la camara.</param>
        /// <param name="up">Direccion Y de la camara.</param>
        /// <returns></returns>
        public static Matrix4x4d LookAt(Point3d eye, Vector3d dir, Vector3d up)
        {
            Vector3d fN  = dir.Unit;
            Vector3d upN = up.Unit;

            Vector3d sN = fN.Cross(upN);
            Vector3d uN = sN.Cross(fN);

            Matrix4x4d m = new Matrix4x4d(
                sN.X, sN.Y, sN.Z, 0,
                uN.X, uN.Y, uN.Z, 0,
                -fN.X, -fN.Y, -fN.Z, 0,
                0, 0, 0, 1);

            m.Mul(Translate(eye.X, eye.Y, eye.Z));
            return(m);
        }
Beispiel #4
0
        public override ITransform3 Concat(ITransform3 transform)
        {
            if (transform is Transform3Identity)
            {
                return(transform);
            }

            Transform3Matrix tmatrix = transform as Transform3Matrix;

            if (tmatrix == null)
            {
                throw new NotImplementedException();
            }

            Matrix4x4d result = this.Matrix.Clone();

            result.Mul(tmatrix.Matrix);
            return(new Transform3Matrix(result, true));
        }