public MeshData() { boundingBox = new Graphics.BoundingBox(); vertices = new List <Graphics.Vertex>(); triangles = new List <Graphics.Triangle>(); unknown1 = new List <short>(); }
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); }
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); }
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; }