示例#1
0
 public void LoadStaticMesh()
 {
     for (int i = 0; i < UStat.Count; i++)
     {
         DirectXObject t = new DirectXObject();
         if (UStat[i].LP.GT.loc != new Vector3(0, 0, 0) || UStat[i].LP.GT.rot != new Vector3(0, 0, 0))
             t.m = Matrix.Scaling(UStat[i].LP.GT.scl) *
                   Matrix.RotationYawPitchRoll(UStat[i].LP.GT.rot.X, UStat[i].LP.GT.rot.Y, UStat[i].LP.GT.rot.Z) *
                   Matrix.Translation(UStat[i].LP.GT.loc);
         else
             t.m = Matrix.Scaling(UStat[i].LP.GT.scl) * UStat[i].LP.GT.m;
         t.verts = UStat[i].ExportDirectX(Color.White.ToArgb());
         if (t.verts.Length == 0)
             continue;
         t.boxorg = new Vector3(t.verts[0].X, t.verts[0].Y, t.verts[0].Z); ;
         t.box = new Vector3(t.verts[0].X, t.verts[0].Y, t.verts[0].Z); ;
         for (int j = 0; j < t.verts.Length; j++)
         {
             t.boxorg.X = Math.Min(t.boxorg.X, t.verts[j].X);
             t.boxorg.Y = Math.Min(t.boxorg.Y, t.verts[j].Y);
             t.boxorg.Z = Math.Min(t.boxorg.Z, t.verts[j].Z);
             t.box.X = Math.Max(t.box.X, t.verts[j].X);
             t.box.Y = Math.Max(t.box.Y, t.verts[j].Y);
             t.box.Z = Math.Max(t.box.Z, t.verts[j].Z);
         }
         t.box -= t.boxorg;
         t.box *= 0.5f;
         t.r = (float)Math.Sqrt(t.box.X * t.box.X + t.box.Y * t.box.Y + t.box.Z * t.box.Z);
         t.box *= 2;
         Vector3 pos = t.boxorg + t.box * 0.5f;
         t.tfpos = Vector3.TransformCoordinate(pos, t.m);
         pos = t.tfpos;
         Vector3 boxorg = pos;
         Vector3 box = pos;
         for (int j = 0; j < t.verts.Length; j++)
         {
             boxorg.X = Math.Min(boxorg.X, Vector3.TransformCoordinate(t.verts[j].Position, t.m).X);
             boxorg.Y = Math.Min(boxorg.Y, Vector3.TransformCoordinate(t.verts[j].Position, t.m).Y);
             boxorg.Z = Math.Min(boxorg.Z, Vector3.TransformCoordinate(t.verts[j].Position, t.m).Z);
             box.X = Math.Max(box.X, Vector3.TransformCoordinate(t.verts[j].Position, t.m).X);
             box.Y = Math.Max(box.Y, Vector3.TransformCoordinate(t.verts[j].Position, t.m).Y);
             box.Z = Math.Max(box.Z, Vector3.TransformCoordinate(t.verts[j].Position, t.m).Z);
         }
         box -= boxorg;
         box *= 0.5f;
         t.tfr = (float)Math.Sqrt(box.X * box.X + box.Y * box.Y + box.Z * box.Z);
         t.name = pcc.names[pcc.Export[(int)UStat[i].index].Name];
         t.name = t.name.Substring(0, t.name.Length-1);
         if (t.name.ToLower().Contains("volumetric") ||
             t.name.ToLower().Contains("spheremesh"))
             t.visible = false;
         else
             t.visible = true;
         t.objindex = (int)UStat[i].index;
         UStat[i].DirectX = t;
     }
 }
示例#2
0
 public void LoadStaticMesh()
 {
     for (int i = 0; i < UStat.Count; i++)
     {
         DirectXObject t = new DirectXObject();
         if (UStat[i].LP.GT.loc != new Vector3(0, 0, 0) || UStat[i].LP.GT.rot != new Vector3(0, 0, 0))
         {
             t.m = Matrix.Scaling(UStat[i].LP.GT.scl) *
                   Matrix.RotationYawPitchRoll(UStat[i].LP.GT.rot.X, UStat[i].LP.GT.rot.Y, UStat[i].LP.GT.rot.Z) *
                   Matrix.Translation(UStat[i].LP.GT.loc);
         }
         else
         {
             t.m = Matrix.Scaling(UStat[i].LP.GT.scl) * UStat[i].LP.GT.m;
         }
         t.verts = UStat[i].ExportDirectX(Color.White.ToArgb());
         if (t.verts.Length == 0)
         {
             continue;
         }
         t.boxorg = new Vector3(t.verts[0].X, t.verts[0].Y, t.verts[0].Z);;
         t.box    = new Vector3(t.verts[0].X, t.verts[0].Y, t.verts[0].Z);;
         for (int j = 0; j < t.verts.Length; j++)
         {
             t.boxorg.X = Math.Min(t.boxorg.X, t.verts[j].X);
             t.boxorg.Y = Math.Min(t.boxorg.Y, t.verts[j].Y);
             t.boxorg.Z = Math.Min(t.boxorg.Z, t.verts[j].Z);
             t.box.X    = Math.Max(t.box.X, t.verts[j].X);
             t.box.Y    = Math.Max(t.box.Y, t.verts[j].Y);
             t.box.Z    = Math.Max(t.box.Z, t.verts[j].Z);
         }
         t.box -= t.boxorg;
         t.box *= 0.5f;
         t.r    = (float)Math.Sqrt(t.box.X * t.box.X + t.box.Y * t.box.Y + t.box.Z * t.box.Z);
         t.box *= 2;
         Vector3 pos = t.boxorg + t.box * 0.5f;
         t.tfpos = Vector3.TransformCoordinate(pos, t.m);
         pos     = t.tfpos;
         Vector3 boxorg = pos;
         Vector3 box    = pos;
         for (int j = 0; j < t.verts.Length; j++)
         {
             boxorg.X = Math.Min(boxorg.X, Vector3.TransformCoordinate(t.verts[j].Position, t.m).X);
             boxorg.Y = Math.Min(boxorg.Y, Vector3.TransformCoordinate(t.verts[j].Position, t.m).Y);
             boxorg.Z = Math.Min(boxorg.Z, Vector3.TransformCoordinate(t.verts[j].Position, t.m).Z);
             box.X    = Math.Max(box.X, Vector3.TransformCoordinate(t.verts[j].Position, t.m).X);
             box.Y    = Math.Max(box.Y, Vector3.TransformCoordinate(t.verts[j].Position, t.m).Y);
             box.Z    = Math.Max(box.Z, Vector3.TransformCoordinate(t.verts[j].Position, t.m).Z);
         }
         box   -= boxorg;
         box   *= 0.5f;
         t.tfr  = (float)Math.Sqrt(box.X * box.X + box.Y * box.Y + box.Z * box.Z);
         t.name = pcc.names[pcc.Export[(int)UStat[i].index].Name];
         t.name = t.name.Substring(0, t.name.Length - 1);
         if (t.name.ToLower().Contains("volumetric") ||
             t.name.ToLower().Contains("spheremesh"))
         {
             t.visible = false;
         }
         else
         {
             t.visible = true;
         }
         t.objindex       = (int)UStat[i].index;
         UStat[i].DirectX = t;
     }
 }