示例#1
0
文件: Visf.cs 项目: weimingtom/OpenKH
            public void AddV(CustomVertex.PositionColoredTextured v)
            {
                if (vcoords != "")
                {
                    vcoords += ",";
                }
                Vector3 vector = Vector3.TransformCoordinate(v.Position, mtxLoc2Blender);

                vcoords += string.Format("[{0},{1},{2}]", vector.X, vector.Y, vector.Z);
                cntv++;
            }
示例#2
0
文件: Visf.cs 项目: weimingtom/OpenKH
        private void tsbExpBlenderpy_Click(object sender, EventArgs e)
        {
            Directory.CreateDirectory("bpyexp");
            DataStream dataStream = vb.Lock(0, 0, LockFlags.ReadOnly);

            try
            {
                var array = new CustomVertex.PositionColoredTextured[cntVerts];
                for (int i = 0; i < cntVerts; i++)
                {
                    array[i] = dataStream.Read <CustomVertex.PositionColoredTextured>();
                }
                int num = 0;
                for (int j = 0; j < alalci.Count; j++)
                {
                    var mkbpy = new Mkbpy();
                    mkbpy.StartTex();
                    string text = "bpyexp\\" + aldc[j].name;
                    Directory.CreateDirectory(text);
                    int      num2 = 0;
                    DC       dC   = aldc[j];
                    Bitmap[] pics = dC.o7.pics;
                    for (int k = 0; k < pics.Length; k++)
                    {
                        Bitmap bitmap = pics[k];
                        string str    = string.Format("t{0:000}.png", num2);
                        bitmap.Save(text + "\\" + str, ImageFormat.Png);
                        mkbpy.AddTex(Path.GetFullPath(text + "\\" + str), string.Format("Tex{0:000}", num2),
                                     string.Format("Mat{0:000}", num2));
                        num2++;
                    }
                    mkbpy.EndTex();
                    CI[] array2 = alalci[j];
                    for (int l = 0; l < array2.Length; l++)
                    {
                        CI cI = array2[l];
                        mkbpy.StartMesh();
                        for (int m = 0; m < cI.ali.Length / 3; m++)
                        {
                            mkbpy.AddV(array[(int)((UIntPtr)cI.ali[m * 3])]);
                            mkbpy.AddV(array[(int)((UIntPtr)cI.ali[m * 3 + 2])]);
                            mkbpy.AddV(array[(int)((UIntPtr)cI.ali[m * 3 + 1])]);
                            mkbpy.AddColorVtx(new[]
                            {
                                Color.FromArgb(array[(int)((UIntPtr)cI.ali[m * 3])].Color),
                                Color.FromArgb(array[(int)((UIntPtr)cI.ali[m * 3 + 2])].Color),
                                Color.FromArgb(array[(int)((UIntPtr)cI.ali[m * 3 + 1])].Color)
                            });
                            mkbpy.AddTuv((cI.texi & 65535) - num, array[(int)((UIntPtr)cI.ali[m * 3])].Tu,
                                         1f - array[(int)((UIntPtr)cI.ali[m * 3])].Tv,
                                         array[(int)((UIntPtr)cI.ali[m * 3 + 2])].Tu,
                                         1f - array[(int)((UIntPtr)cI.ali[m * 3 + 2])].Tv,
                                         array[(int)((UIntPtr)cI.ali[m * 3 + 1])].Tu,
                                         1f - array[(int)((UIntPtr)cI.ali[m * 3 + 1])].Tv);
                        }
                        mkbpy.EndMesh(cI.vifi);
                    }
                    mkbpy.Finish();
                    File.WriteAllText(text + "\\mesh.py", mkbpy.ToString(), Encoding.ASCII);
                    num += num2;
                }
            }
            finally
            {
                vb.Unlock();
            }
            Process.Start("explorer.exe", " bpyexp");
        }
示例#3
0
文件: Visf.cs 项目: Truthkey/OpenKH
 private void p1_Load(object sender, EventArgs e)
 {
     this.p3D = new Direct3D();
     this.alDeleter.Add(this.p3D);
     this.device = new Device(this.p3D, 0, DeviceType.Hardware, this.p1.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters[]
     {
         this.PP
     });
     this.alDeleter.Add(this.device);
     this.device.SetRenderState(RenderState.Lighting, false);
     this.device.SetRenderState(RenderState.ZEnable, true);
     this.device.SetRenderState(RenderState.AlphaTestEnable, true);
     this.device.SetRenderState(RenderState.AlphaRef, 2);
     this.device.SetRenderState<Compare>(RenderState.AlphaFunc, Compare.GreaterEqual);
     this.device.SetRenderState(RenderState.AlphaBlendEnable, true);
     this.device.SetRenderState<Blend>(RenderState.SourceBlend, Blend.SourceAlpha);
     this.device.SetRenderState<Blend>(RenderState.SourceBlendAlpha, Blend.SourceAlpha);
     this.device.SetRenderState<Blend>(RenderState.DestinationBlend, Blend.InverseSourceAlpha);
     this.device.SetRenderState<Blend>(RenderState.DestinationBlendAlpha, Blend.InverseSourceAlpha);
     this.device.SetRenderState<Cull>(RenderState.CullMode, Cull.Counterclockwise);
     this.device.SetRenderState(RenderState.FogColor, this.p1.BackColor.ToArgb());
     this.device.SetRenderState(RenderState.FogStart, 5f);
     this.device.SetRenderState(RenderState.FogEnd, 30000f);
     this.device.SetRenderState(RenderState.FogDensity, 0.0001f);
     this.device.SetRenderState<FogMode>(RenderState.FogVertexMode, FogMode.Exponential);
     this.p1.MouseWheel += new MouseEventHandler(this.p1_MouseWheel);
     List<CustomVertex.PositionColoredTextured> list = new List<CustomVertex.PositionColoredTextured>();
     foreach (DC current in this.aldc)
     {
         ToolStripButton toolStripButton = new ToolStripButton("Show " + current.name);
         toolStripButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
         toolStripButton.CheckOnClick = true;
         toolStripButton.Tag = current.dcId;
         toolStripButton.Checked = true;
         toolStripButton.CheckedChanged += new EventHandler(this.tsiIfRender_CheckedChanged);
         this.toolStrip1.Items.Insert(this.toolStrip1.Items.IndexOf(this.tsbShowColl), toolStripButton);
     }
     this.alci.Clear();
     this.altex.Clear();
     int[] array = new int[4];
     int num = 0;
     foreach (DC current2 in this.aldc)
     {
         int count = this.altex.Count;
         Bitmap[] pics = current2.o7.pics;
         for (int i = 0; i < pics.Length; i++)
         {
             Bitmap bitmap = pics[i];
             MemoryStream memoryStream = new MemoryStream();
             bitmap.Save(memoryStream, ImageFormat.Png);
             memoryStream.Position = 0L;
             Texture item;
             this.altex.Add(item = Texture.FromStream(this.device, memoryStream));
             this.alDeleter.Add(item);
         }
         if (current2.o4Mdlx != null)
         {
             using (SortedDictionary<int, Parse4Mdlx.Model>.Enumerator enumerator3 = current2.o4Mdlx.dictModel.GetEnumerator())
             {
                 while (enumerator3.MoveNext())
                 {
                     KeyValuePair<int, Parse4Mdlx.Model> current3 = enumerator3.Current;
                     Visf.CI cI = new Visf.CI();
                     int count2 = list.Count;
                     Parse4Mdlx.Model value = current3.Value;
                     list.AddRange(value.alv);
                     List<uint> list2 = new List<uint>();
                     for (int j = 0; j < value.alv.Count; j++)
                     {
                         list2.Add((uint)(count2 + j));
                     }
                     cI.ali = list2.ToArray();
                     cI.texi = count + current3.Key;
                     cI.vifi = 0;
                     this.alci.Add(cI);
                 }
                 goto IL_75D;
             }
             goto IL_3C9;
         }
         goto IL_3C9;
         IL_75D:
         this.alalci.Add(this.alci.ToArray());
         this.alci.Clear();
         continue;
         IL_3C9:
         if (current2.o4Map != null)
         {
             for (int k = 0; k < current2.o4Map.alvifpkt.Count; k++)
             {
                 Vifpli vifpli = current2.o4Map.alvifpkt[k];
                 byte[] vifpkt = vifpli.vifpkt;
                 VU1Mem vu = new VU1Mem();
                 ParseVIF1 parseVIF = new ParseVIF1(vu);
                 parseVIF.Parse(new MemoryStream(vifpkt, false), 0);
                 foreach (byte[] current4 in parseVIF.almsmem)
                 {
                     Visf.CI cI2 = new Visf.CI();
                     MemoryStream memoryStream2 = new MemoryStream(current4, false);
                     BinaryReader binaryReader = new BinaryReader(memoryStream2);
                     binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     int num2 = binaryReader.ReadInt32();
                     int num3 = binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     int num4 = binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     binaryReader.ReadInt32();
                     int num5 = binaryReader.ReadInt32();
                     List<uint> list3 = new List<uint>();
                     int count3 = list.Count;
                     for (int l = 0; l < num2; l++)
                     {
                         memoryStream2.Position = (long)(16 * (num3 + l));
                         int num6 = (int)binaryReader.ReadInt16();
                         binaryReader.ReadInt16();
                         int num7 = (int)binaryReader.ReadInt16();
                         binaryReader.ReadInt16();
                         int num8 = (int)binaryReader.ReadInt16();
                         binaryReader.ReadInt16();
                         int num9 = (int)binaryReader.ReadInt16();
                         binaryReader.ReadInt16();
                         memoryStream2.Position = (long)(16 * (num5 + num8));
                         Vector3 v;
                         v.X = -binaryReader.ReadSingle();
                         v.Y = binaryReader.ReadSingle();
                         v.Z = binaryReader.ReadSingle();
                         memoryStream2.Position = (long)(16 * (num4 + l));
                         int num10 = (int)((byte)binaryReader.ReadUInt32());
                         int num11 = (int)((byte)binaryReader.ReadUInt32());
                         int num12 = (int)((byte)binaryReader.ReadUInt32());
                         int num13 = (int)((byte)binaryReader.ReadUInt32());
                         if (num4 == 0)
                         {
                             num10 = 255;
                             num11 = 255;
                             num12 = 255;
                             num13 = 255;
                         }
                         array[num & 3] = count3 + l;
                         num++;
                         if (num9 != 0 && num9 != 16)
                         {
                             if (num9 == 32)
                             {
                                 list3.Add(Convert.ToUInt32(array[num - 1 & 3]));
                                 list3.Add(Convert.ToUInt32(array[num - 2 & 3]));
                                 list3.Add(Convert.ToUInt32(array[num - 3 & 3]));
                             }
                             else
                             {
                                 if (num9 == 48)
                                 {
                                     list3.Add(Convert.ToUInt32(array[num - 1 & 3]));
                                     list3.Add(Convert.ToUInt32(array[num - 3 & 3]));
                                     list3.Add(Convert.ToUInt32(array[num - 2 & 3]));
                                 }
                             }
                         }
                         Color color = Color.FromArgb((int)this.lm.al[num13], (int)this.lm.al[num10], (int)this.lm.al[num11], (int)this.lm.al[num12]);
                         CustomVertex.PositionColoredTextured item2 = new CustomVertex.PositionColoredTextured(v, color.ToArgb(), (float)num6 / 16f / 256f, (float)num7 / 16f / 256f);
                         list.Add(item2);
                     }
                     cI2.ali = list3.ToArray();
                     cI2.texi = count + vifpli.texi;
                     cI2.vifi = k;
                     this.alci.Add(cI2);
                 }
             }
             goto IL_75D;
         }
         goto IL_75D;
     }
     if (this.alalci.Count != 0)
     {
         this.alci.Clear();
         this.alci.AddRange(this.alalci[0]);
     }
     if (list.Count == 0)
     {
         list.Add(default(CustomVertex.PositionColoredTextured));
     }
     this.vb = new VertexBuffer(this.device, (this.cntVerts = list.Count) * CustomVertex.PositionColoredTextured.Size, Usage.Points, CustomVertex.PositionColoredTextured.Format, Pool.Managed);
     this.alDeleter.Add(this.vb);
     DataStream dataStream = this.vb.Lock(0, 0, LockFlags.None);
     try
     {
         foreach (CustomVertex.PositionColoredTextured current5 in list)
         {
             dataStream.Write<CustomVertex.PositionColoredTextured>(current5);
         }
     }
     finally
     {
         this.vb.Unlock();
     }
     this.lCntVert.Text = this.cntVerts.ToString("#,##0");
     int num14 = 0;
     this.alib.Clear();
     int num15 = 0;
     foreach (Visf.CI[] current6 in this.alalci)
     {
         Visf.CI[] array2 = current6;
         for (int i = 0; i < array2.Length; i++)
         {
             Visf.CI cI3 = array2[i];
             if (cI3.ali.Length != 0)
             {
                 IndexBuffer indexBuffer = new IndexBuffer(this.device, 4 * cI3.ali.Length, Usage.None, Pool.Managed, false);
                 num14 += cI3.ali.Length;
                 this.alDeleter.Add(indexBuffer);
                 DataStream dataStream2 = indexBuffer.Lock(0, 0, LockFlags.None);
                 try
                 {
                     uint[] ali = cI3.ali;
                     for (int m = 0; m < ali.Length; m++)
                     {
                         uint value2 = ali[m];
                         dataStream2.Write<uint>(value2);
                     }
                 }
                 finally
                 {
                     indexBuffer.Unlock();
                 }
                 Visf.RIB rIB = new Visf.RIB();
                 rIB.ib = indexBuffer;
                 rIB.cnt = cI3.ali.Length;
                 rIB.texi = cI3.texi;
                 rIB.vifi = cI3.vifi;
                 rIB.name = this.aldc[num15].name;
                 rIB.dcId = this.aldc[num15].dcId;
                 this.alib.Add(rIB);
             }
             else
             {
                 Visf.RIB rIB2 = new Visf.RIB();
                 rIB2.ib = null;
                 rIB2.cnt = 0;
                 rIB2.texi = cI3.texi;
                 rIB2.vifi = cI3.vifi;
                 rIB2.name = this.aldc[num15].name;
                 rIB2.dcId = this.aldc[num15].dcId;
                 this.alib.Add(rIB2);
             }
         }
         num15++;
     }
     this.lCntTris.Text = (num14 / 3).ToString("#,##0");
     foreach (Co2 current7 in this.coll.alCo2)
     {
         this.alpf.Add(this.putb.Add(current7));
     }
     if (this.putb.alv.Count != 0)
     {
         this.pvi = new Putvi(this.putb, this.device);
     }
     Console.Write("");
 }
示例#4
0
文件: Visf.cs 项目: weimingtom/OpenKH
        private void p1_Load(object sender, EventArgs e)
        {
            p3D = new Direct3D();
            alDeleter.Add(p3D);
            device = new Device(p3D, 0, DeviceType.Hardware, p1.Handle, CreateFlags.HardwareVertexProcessing, new[]
            {
                PP
            });
            alDeleter.Add(device);
            device.SetRenderState(RenderState.Lighting, false);
            device.SetRenderState(RenderState.ZEnable, true);
            device.SetRenderState(RenderState.AlphaTestEnable, true);
            device.SetRenderState(RenderState.AlphaRef, 2);
            device.SetRenderState(RenderState.AlphaFunc, Compare.GreaterEqual);
            device.SetRenderState(RenderState.AlphaBlendEnable, true);
            device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha);
            device.SetRenderState(RenderState.SourceBlendAlpha, Blend.SourceAlpha);
            device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha);
            device.SetRenderState(RenderState.DestinationBlendAlpha, Blend.InverseSourceAlpha);
            device.SetRenderState(RenderState.CullMode, Cull.Counterclockwise);
            device.SetRenderState(RenderState.FogColor, p1.BackColor.ToArgb());
            device.SetRenderState(RenderState.FogStart, 5f);
            device.SetRenderState(RenderState.FogEnd, 30000f);
            device.SetRenderState(RenderState.FogDensity, 0.0001f);
            device.SetRenderState(RenderState.FogVertexMode, FogMode.Exponential);
            p1.MouseWheel += p1_MouseWheel;
            var list = new List <CustomVertex.PositionColoredTextured>();

            foreach (DC current in aldc)
            {
                var toolStripButton = new ToolStripButton("Show " + current.name);
                toolStripButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
                toolStripButton.CheckOnClick    = true;
                toolStripButton.Tag             = current.dcId;
                toolStripButton.Checked         = true;
                toolStripButton.CheckedChanged += tsiIfRender_CheckedChanged;
                toolStrip1.Items.Insert(toolStrip1.Items.IndexOf(tsbShowColl), toolStripButton);
            }
            alci.Clear();
            altex.Clear();
            var array = new int[4];
            int num   = 0;

            foreach (DC current2 in aldc)
            {
                int      count = altex.Count;
                Bitmap[] pics  = current2.o7.pics;
                for (int i = 0; i < pics.Length; i++)
                {
                    Bitmap bitmap       = pics[i];
                    var    memoryStream = new MemoryStream();
                    bitmap.Save(memoryStream, ImageFormat.Png);
                    memoryStream.Position = 0L;
                    Texture item;
                    altex.Add(item = Texture.FromStream(device, memoryStream));
                    alDeleter.Add(item);
                }
                if (current2.o4Mdlx != null)
                {
                    using (
                        SortedDictionary <int, Parse4Mdlx.Model> .Enumerator enumerator3 =
                            current2.o4Mdlx.dictModel.GetEnumerator())
                    {
                        while (enumerator3.MoveNext())
                        {
                            KeyValuePair <int, Parse4Mdlx.Model> current3 = enumerator3.Current;
                            var cI                 = new CI();
                            int count2             = list.Count;
                            Parse4Mdlx.Model value = current3.Value;
                            list.AddRange(value.alv);
                            var list2 = new List <uint>();
                            for (int j = 0; j < value.alv.Count; j++)
                            {
                                list2.Add((uint)(count2 + j));
                            }
                            cI.ali  = list2.ToArray();
                            cI.texi = count + current3.Key;
                            cI.vifi = 0;
                            alci.Add(cI);
                        }
                        goto IL_75D;
                    }
                }
                goto IL_3C9;
IL_75D:
                alalci.Add(alci.ToArray());
                alci.Clear();
                continue;
IL_3C9:
                if (current2.o4Map != null)
                {
                    for (int k = 0; k < current2.o4Map.alvifpkt.Count; k++)
                    {
                        Vifpli vifpli   = current2.o4Map.alvifpkt[k];
                        byte[] vifpkt   = vifpli.vifpkt;
                        var    vu       = new VU1Mem();
                        var    parseVIF = new ParseVIF1(vu);
                        parseVIF.Parse(new MemoryStream(vifpkt, false), 0);
                        foreach (var current4 in parseVIF.almsmem)
                        {
                            var cI2           = new CI();
                            var memoryStream2 = new MemoryStream(current4, false);
                            var binaryReader  = new BinaryReader(memoryStream2);
                            binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            int num2 = binaryReader.ReadInt32();
                            int num3 = binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            int num4 = binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            binaryReader.ReadInt32();
                            int num5   = binaryReader.ReadInt32();
                            var list3  = new List <uint>();
                            int count3 = list.Count;
                            for (int l = 0; l < num2; l++)
                            {
                                memoryStream2.Position = 16 * (num3 + l);
                                int num6 = binaryReader.ReadInt16();
                                binaryReader.ReadInt16();
                                int num7 = binaryReader.ReadInt16();
                                binaryReader.ReadInt16();
                                int num8 = binaryReader.ReadInt16();
                                binaryReader.ReadInt16();
                                int num9 = binaryReader.ReadInt16();
                                binaryReader.ReadInt16();
                                memoryStream2.Position = 16 * (num5 + num8);
                                Vector3 v;
                                v.X = -binaryReader.ReadSingle();
                                v.Y = binaryReader.ReadSingle();
                                v.Z = binaryReader.ReadSingle();
                                memoryStream2.Position = 16 * (num4 + l);
                                int num10 = (byte)binaryReader.ReadUInt32();
                                int num11 = (byte)binaryReader.ReadUInt32();
                                int num12 = (byte)binaryReader.ReadUInt32();
                                int num13 = (byte)binaryReader.ReadUInt32();
                                if (num4 == 0)
                                {
                                    num10 = 255;
                                    num11 = 255;
                                    num12 = 255;
                                    num13 = 255;
                                }
                                array[num & 3] = count3 + l;
                                num++;
                                if (num9 != 0 && num9 != 16)
                                {
                                    if (num9 == 32)
                                    {
                                        list3.Add(Convert.ToUInt32(array[num - 1 & 3]));
                                        list3.Add(Convert.ToUInt32(array[num - 2 & 3]));
                                        list3.Add(Convert.ToUInt32(array[num - 3 & 3]));
                                    }
                                    else
                                    {
                                        if (num9 == 48)
                                        {
                                            list3.Add(Convert.ToUInt32(array[num - 1 & 3]));
                                            list3.Add(Convert.ToUInt32(array[num - 3 & 3]));
                                            list3.Add(Convert.ToUInt32(array[num - 2 & 3]));
                                        }
                                    }
                                }
                                Color color = Color.FromArgb(lm.al[num13], lm.al[num10], lm.al[num11], lm.al[num12]);
                                var   item2 = new CustomVertex.PositionColoredTextured(v, color.ToArgb(), num6 / 16f / 256f,
                                                                                       num7 / 16f / 256f);
                                list.Add(item2);
                            }
                            cI2.ali  = list3.ToArray();
                            cI2.texi = count + vifpli.texi;
                            cI2.vifi = k;
                            alci.Add(cI2);
                        }
                    }
                }
                goto IL_75D;
            }
            if (alalci.Count != 0)
            {
                alci.Clear();
                alci.AddRange(alalci[0]);
            }
            if (list.Count == 0)
            {
                list.Add(default(CustomVertex.PositionColoredTextured));
            }
            vb = new VertexBuffer(device, (cntVerts = list.Count) * CustomVertex.PositionColoredTextured.Size,
                                  Usage.Points, CustomVertex.PositionColoredTextured.Format, Pool.Managed);
            alDeleter.Add(vb);
            DataStream dataStream = vb.Lock(0, 0, LockFlags.None);

            try
            {
                foreach (CustomVertex.PositionColoredTextured current5 in list)
                {
                    dataStream.Write(current5);
                }
            }
            finally
            {
                vb.Unlock();
            }
            lCntVert.Text = cntVerts.ToString("#,##0");
            int num14 = 0;

            alib.Clear();
            int num15 = 0;

            foreach (var current6 in alalci)
            {
                CI[] array2 = current6;
                for (int i = 0; i < array2.Length; i++)
                {
                    CI cI3 = array2[i];
                    if (cI3.ali.Length != 0)
                    {
                        var indexBuffer = new IndexBuffer(device, 4 * cI3.ali.Length, Usage.None, Pool.Managed, false);
                        num14 += cI3.ali.Length;
                        alDeleter.Add(indexBuffer);
                        DataStream dataStream2 = indexBuffer.Lock(0, 0, LockFlags.None);
                        try
                        {
                            uint[] ali = cI3.ali;
                            for (int m = 0; m < ali.Length; m++)
                            {
                                uint value2 = ali[m];
                                dataStream2.Write(value2);
                            }
                        }
                        finally
                        {
                            indexBuffer.Unlock();
                        }
                        var rIB = new RIB();
                        rIB.ib   = indexBuffer;
                        rIB.cnt  = cI3.ali.Length;
                        rIB.texi = cI3.texi;
                        rIB.vifi = cI3.vifi;
                        rIB.name = aldc[num15].name;
                        rIB.dcId = aldc[num15].dcId;
                        alib.Add(rIB);
                    }
                    else
                    {
                        var rIB2 = new RIB();
                        rIB2.ib   = null;
                        rIB2.cnt  = 0;
                        rIB2.texi = cI3.texi;
                        rIB2.vifi = cI3.vifi;
                        rIB2.name = aldc[num15].name;
                        rIB2.dcId = aldc[num15].dcId;
                        alib.Add(rIB2);
                    }
                }
                num15++;
            }
            lCntTris.Text = (num14 / 3).ToString("#,##0");
            foreach (Co2 current7 in coll.alCo2)
            {
                alpf.Add(putb.Add(current7));
            }
            if (putb.alv.Count != 0)
            {
                pvi = new Putvi(putb, device);
            }
            Console.Write("");
        }
示例#5
0
文件: Visf.cs 项目: Truthkey/OpenKH
 private void tsbExpBlenderpy_Click(object sender, EventArgs e)
 {
     Directory.CreateDirectory("bpyexp");
     DataStream dataStream = this.vb.Lock(0, 0, LockFlags.ReadOnly);
     try
     {
         CustomVertex.PositionColoredTextured[] array = new CustomVertex.PositionColoredTextured[this.cntVerts];
         for (int i = 0; i < this.cntVerts; i++)
         {
             array[i] = dataStream.Read<CustomVertex.PositionColoredTextured>();
         }
         int num = 0;
         for (int j = 0; j < this.alalci.Count; j++)
         {
             Visf.Mkbpy mkbpy = new Visf.Mkbpy();
             mkbpy.StartTex();
             string text = "bpyexp\\" + this.aldc[j].name;
             Directory.CreateDirectory(text);
             int num2 = 0;
             DC dC = this.aldc[j];
             Bitmap[] pics = dC.o7.pics;
             for (int k = 0; k < pics.Length; k++)
             {
                 Bitmap bitmap = pics[k];
                 string str = string.Format("t{0:000}.png", num2);
                 bitmap.Save(text + "\\" + str, ImageFormat.Png);
                 mkbpy.AddTex(Path.GetFullPath(text + "\\" + str), string.Format("Tex{0:000}", num2), string.Format("Mat{0:000}", num2));
                 num2++;
             }
             mkbpy.EndTex();
             Visf.CI[] array2 = this.alalci[j];
             for (int l = 0; l < array2.Length; l++)
             {
                 Visf.CI cI = array2[l];
                 mkbpy.StartMesh();
                 for (int m = 0; m < cI.ali.Length / 3; m++)
                 {
                     mkbpy.AddV(array[(int)((UIntPtr)cI.ali[m * 3])]);
                     mkbpy.AddV(array[(int)((UIntPtr)cI.ali[m * 3 + 2])]);
                     mkbpy.AddV(array[(int)((UIntPtr)cI.ali[m * 3 + 1])]);
                     mkbpy.AddColorVtx(new Color[]
                     {
                         Color.FromArgb(array[(int)((UIntPtr)cI.ali[m * 3])].Color),
                         Color.FromArgb(array[(int)((UIntPtr)cI.ali[m * 3 + 2])].Color),
                         Color.FromArgb(array[(int)((UIntPtr)cI.ali[m * 3 + 1])].Color)
                     });
                     mkbpy.AddTuv((cI.texi & 65535) - num, array[(int)((UIntPtr)cI.ali[m * 3])].Tu, 1f - array[(int)((UIntPtr)cI.ali[m * 3])].Tv, array[(int)((UIntPtr)cI.ali[m * 3 + 2])].Tu, 1f - array[(int)((UIntPtr)cI.ali[m * 3 + 2])].Tv, array[(int)((UIntPtr)cI.ali[m * 3 + 1])].Tu, 1f - array[(int)((UIntPtr)cI.ali[m * 3 + 1])].Tv);
                 }
                 mkbpy.EndMesh(cI.vifi);
             }
             mkbpy.Finish();
             File.WriteAllText(text + "\\mesh.py", mkbpy.ToString(), Encoding.ASCII);
             num += num2;
         }
     }
     finally
     {
         this.vb.Unlock();
     }
     Process.Start("explorer.exe", " bpyexp");
 }