コード例 #1
0
 public MeshData()
 {
     boundingBox = new Graphics.BoundingBox();
     vertices    = new List <Graphics.Vertex>();
     triangles   = new List <Graphics.Triangle>();
     unknown1    = new List <short>();
 }
コード例 #2
0
 public override bool Read(BinaryReader br)
 {
     offset       = GsfPackage.ReadRelativeOffset(br);
     unknown2     = br.ReadInt32();
     meshesData   = new List <MeshData>();
     frameIndices = new List <short>();
     if (offset != null)
     {
         br.BaseStream.Seek(offset.Value, SeekOrigin.Begin);
         Graphics.BoundingBox bb = Graphics.BoundingBox.FromReader(br);
         // TODO: Use this bounding box in addition (transformation) to the ones from each mesh
         int amount1             = br.ReadInt32();
         int meshesAddress       = GsfPackage.ReadRelativeOffset(br).Value;
         int amount2             = br.ReadInt32();
         int frameIndicesAddress = GsfPackage.ReadRelativeOffset(br).Value;
         int amount3             = br.ReadInt32();
         br.BaseStream.Seek(meshesAddress, SeekOrigin.Begin);    // Usually should not be needed
         for (int i = 0; i < amount2; i++)
         {
             MeshData md = MeshData.ReadHeader(br);
             meshesData.Add(md);
         }
         for (int i = 0; i < amount2; i++)
         {
             meshesData[i].Read(br);
         }
         br.BaseStream.Seek(frameIndicesAddress, SeekOrigin.Begin);
         for (int i = 0; i < amount3; i++)
         {
             short index = br.ReadInt16();
             frameIndices.Add(index);
         }
     }
     return(true);
 }
コード例 #3
0
 public override bool Read(BinaryReader br)
 {
     boundingBox = Graphics.BoundingBox.FromReader(br);
     d1          = br.ReadSingle();
     d2          = br.ReadSingle();
     d3          = br.ReadSingle();
     d4          = br.ReadSingle();
     return(true);
 }
コード例 #4
0
        protected virtual void SetUpCamera(Graphics.BoundingBox bbox, bool oppositeSide)
        {
            const float Yaw   = MathUtil.PiOverFour / 2;  // -MathUtil.PiOverTwo;
            const float Pitch = -MathUtil.PiOverFour / 3; // MathUtil.PiOverTwo;

            Camera.Yaw   = oppositeSide ? (Yaw - MathUtil.Pi) : Yaw;
            Camera.Pitch = Pitch;

            var center = (bbox.PointA.ToDx3() + bbox.PointB.ToDx3()) / 2f;

            var dx = Math.Abs(bbox.PointA.X - bbox.PointB.X);
            var dy = Math.Abs(bbox.PointA.Y - bbox.PointB.Y);
            var dz = Math.Abs(bbox.PointA.Z - bbox.PointB.Z);

            var maxAxis = Math.Max(dx, Math.Max(dy, dz)); // Add a bit because I'm too lazy to adjust FoV for the angle

            var backDirection = -Vector3.Transform(Vector3.BackwardRH, Camera.GetRotation());
            var d             = -(maxAxis / 2) / Math.Sin(Camera.FoV / 2);

            Camera.CameraPosition = center + new Vector3(backDirection.X, backDirection.Y, backDirection.Z) * (float)d;
        }