示例#1
0
 /// <summary>
 /// Z軸(001)を引数のベクトルvに回転させる行列を生成する
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 public static M3d CreateRotationFromZ(V3d v)
 {
     v.Normalize();
     if (Math.Abs(v.Z - 1) < Th)
     {
         return(M3d.Identity);
     }
     else if (Math.Abs(v.Z + 1) < Th)
     {
         return(M3d.CreateRotationX(Math.PI));
     }
     else
     {
         return(M3d.CreateFromAxisAngle(V3d.Cross(v, Z), V3d.CalculateAngle(Z, v)));
     }
 }
示例#2
0
 void LookAt(double eyeX,double eyeY,double eyeZ,double centerX,double centerY,double centerZ,double upX,double upY,double upZ)
 {
     OpenTK.Vector3d F = new OpenTK.Vector3d(centerX - eyeX, centerX - eyeY, centerZ - eyeZ);
     OpenTK.Vector3d UP = new OpenTK.Vector3d(upX, upY, upZ);
     F.Normalize();
     UP.Normalize();
     OpenTK.Vector3d s = new OpenTK.Vector3d(F.Y * UP.Z - F.Z * UP.Y,
                                             F.Z * UP.X - F.X * UP.Z,
                                             F.X * UP.Y - F.Y * UP.X);
     OpenTK.Vector3d u = new OpenTK.Vector3d(s.Y * F.Z - s.Z * F.Y,
                                             s.Z * F.X - s.X * F.Z,
                                             s.X * F.Y - s.Y * F.X);
     OpenTK.Matrix4d m = new OpenTK.Matrix4d(s.X, s.Y, s.Z, 0, u.X, u.Y, u.Z, 0, -F.X, -F.Y, -F.Z, 0, 0, 0, 0, 1);
     GL.MultMatrix(ref m);
     GL.Translate(-eyeX, -eyeY, -eyeZ);
 }
示例#3
0
        /// <summary>
        /// Z軸(001)を引数のベクトルvに回転させる行列を生成する
        /// </summary>
        /// <param name="v"></param>
        /// <returns></returns>
        public static M3d CreateRotationToZ(V3d v)
        {
            M3d rot;

            v.Normalize();
            if (Math.Abs(v.Z - 1) < Th)
            {
                rot = M3d.Identity;
            }
            else if (Math.Abs(v.Z + 1) < Th)
            {
                rot = M3d.CreateRotationX(Math.PI);
            }
            else
            {
                rot = M3d.CreateFromAxisAngle(V3d.Cross(Z, v), V3d.CalculateAngle(Z, v));
            }
            return(rot);
        }