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); }
/// <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); }
/// <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); }
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)); }