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