public TexSelection(Texture2D texture, bool allowVoidImages = false) { InitializeComponent(); foreach (Texture2D.ImageInfo imgInfo in texture.imgList) { if (!allowVoidImages && imgInfo.offset == -1) continue; else { string storage; int offset; bool bChecked = (texture.imgList.Count == 1) ? true : false; if (imgInfo.storageType == Texture2D.storage.pccSto) { storage = "pcc file"; offset = imgInfo.offset + (int)texture.pccOffset; } else { storage = "archive file"; offset = imgInfo.offset; } checkedListBoxTex.Items.Add("Image " + imgInfo.imgSize + " stored inside " + storage + " at offset " + offset, bChecked); } if (imgInfo.imgSize.width <= 4 || imgInfo.imgSize.height <= 4) // avoids selection of smaller images break; } }
public void ReadTextureParams(byte[] raw) { int count = BitConverter.ToInt32(raw, 24); int pos = 28; for (int i = 0; i < count; i++) { List<PropertyReader.Property> tp = PropertyReader.ReadProp(pcc, raw, pos); string name = pcc.getNameEntry(tp[1].Value.IntValue); int Idx = tp[2].Value.IntValue; TextureParam t = new TextureParam(); t.Desc = name; t.TexIndex = Idx; if (name.ToLower().Contains("diffuse") && Idx >0) { Texture2D tex = new Texture2D(pcc, Idx - 1); string loc = Path.GetDirectoryName(Application.ExecutablePath); Texture2D.ImageInfo inf = new Texture2D.ImageInfo(); for (int j = 0; j < tex.imgList.Count(); j++) if (tex.imgList[j].storageType != Texture2D.storage.empty) { inf = tex.imgList[j]; break; } if (File.Exists(loc + "\\exec\\TempTex.dds")) File.Delete(loc + "\\exec\\TempTex.dds"); tex.extractImage(inf, ME3Directory.cookedPath, loc + "\\exec\\TempTex.dds"); if (File.Exists(loc + "\\exec\\TempTex.dds")) try { t.Texture = TextureLoader.FromFile(Meshplorer.Preview3D.device, loc + "\\exec\\TempTex.dds"); } catch (Direct3DXException e) { } else t.Texture = null; } else t.Texture = null; Textures.Add(t); pos = tp[tp.Count -1].offend; } }
public void GenerateMesh() { if (Mesh.IdxBuf.Indexes.Count() != 0) { Meshplorer.Preview3D.RawTriangles = new Microsoft.DirectX.Direct3D.CustomVertex.PositionTextured[Mesh.IdxBuf.Indexes.Count()]; for (int i = 0; i < Mesh.IdxBuf.Indexes.Count(); i++) { int idx = Mesh.IdxBuf.Indexes[i]; Vector3 pos = Mesh.Vertices.Points[idx]; Vector2 UV = Mesh.Edges.UVSet[idx].UVs[0]; Meshplorer.Preview3D.RawTriangles[i] = new Microsoft.DirectX.Direct3D.CustomVertex.PositionTextured(pos, UV.X, UV.Y); } } else { Meshplorer.Preview3D.RawTriangles = new Microsoft.DirectX.Direct3D.CustomVertex.PositionTextured[Mesh.RawTris.RawTriangles.Count() * 3]; for (int i = 0; i < Mesh.RawTris.RawTriangles.Count(); i++) { int idx = Mesh.RawTris.RawTriangles[i].v0; Vector3 pos = Mesh.Vertices.Points[idx]; Vector2 UV = Mesh.Edges.UVSet[idx].UVs[0]; Meshplorer.Preview3D.RawTriangles[i * 3] = new Microsoft.DirectX.Direct3D.CustomVertex.PositionTextured(pos, UV.X, UV.Y); idx = Mesh.RawTris.RawTriangles[i].v1; pos = Mesh.Vertices.Points[idx]; UV = Mesh.Edges.UVSet[idx].UVs[0]; Meshplorer.Preview3D.RawTriangles[i * 3 + 1] = new Microsoft.DirectX.Direct3D.CustomVertex.PositionTextured(pos, UV.X, UV.Y); idx = Mesh.RawTris.RawTriangles[i].v2; pos = Mesh.Vertices.Points[idx]; UV = Mesh.Edges.UVSet[idx].UVs[0]; Meshplorer.Preview3D.RawTriangles[i * 3 + 2] = new Microsoft.DirectX.Direct3D.CustomVertex.PositionTextured(pos, UV.X, UV.Y); } } if (Mesh.Mat.MatInst.Count() != 0) { MaterialInstanceConstant m = Mesh.Mat.MatInst[0]; Meshplorer.Preview3D.CurrentTex = null; for (int i = 0; i < m.Textures.Count(); i++) if (m.Textures[i].Desc.ToLower().Contains("diffuse") && Meshplorer.Preview3D.device != null) { Texture2D t = new Texture2D(pcc, m.Textures[i].TexIndex - 1); string loc = Path.GetDirectoryName(Application.ExecutablePath); Texture2D.ImageInfo inf = new Texture2D.ImageInfo(); for (int j = 0; j < t.imgList.Count(); j++) if (t.imgList[j].storageType != Texture2D.storage.empty) { inf = t.imgList[j]; break; } if (File.Exists(loc + "\\exec\\TempTex.dds")) File.Delete(loc + "\\exec\\TempTex.dds"); t.extractImage(inf, ME3Directory.cookedPath, loc + "\\exec\\TempTex.dds"); if (File.Exists(loc + "\\exec\\TempTex.dds")) { Texture t2 = TextureLoader.FromFile(Meshplorer.Preview3D.device, loc + "\\exec\\TempTex.dds"); Meshplorer.Preview3D.CurrentTex = t2; } break; } } }
private void listView1_MouseClick(object sender, MouseEventArgs e) { ListView.SelectedIndexCollection n = listView1.SelectedIndices; if (n.Count != 1 || pcc == null) return; int index = Convert.ToInt32(listView1.Items[n[0]].Name); if (pcc.Exports[index].ClassName == Texture2D.className) tex2D = new Texture2D(pcc, index); else tex2D = null; if (e.Button == System.Windows.Forms.MouseButtons.Right) { switch (pcc.Exports[index].ClassName) { case "Sequence": editToolStripMenuItem1.Visible = true; inSequenceEditorToolStripMenuItem.Visible = true; textureToolStripMenuItem.Visible = false; soundsToolStripMenuItem.Visible = false; contextMenuStrip1.Show(MousePosition); break; case "Texture2D": soundsToolStripMenuItem.Visible = false; editToolStripMenuItem1.Visible = false; textureToolStripMenuItem.Visible = true; contextMenuStrip1.Show(MousePosition); break; //case "Level": // soundsToolStripMenuItem.Visible = false; // editToolStripMenuItem1.Visible = true; // inSequenceEditorToolStripMenuItem.Visible = false; // textureToolStripMenuItem.Visible = false; // contextMenuStrip1.Show(MousePosition); // break; case "WwiseStream": editToolStripMenuItem1.Visible = false; textureToolStripMenuItem.Visible = false; soundsToolStripMenuItem.Visible = true; contextMenuStrip1.Show(MousePosition); break; default: soundsToolStripMenuItem.Visible = false; editToolStripMenuItem1.Visible = false; textureToolStripMenuItem.Visible = false; contextMenuStrip1.Show(MousePosition); break; } } }