Esempio n. 1
0
 public TextureChunkController(NSFController nsfcontroller, TextureChunk texturechunk) : base(nsfcontroller, texturechunk)
 {
     this.texturechunk     = texturechunk;
     Node.Text             = string.Format("Texture Chunk ({0})", Entry.EIDToString(texturechunk.EID));
     Node.ImageKey         = "texturechunk";
     Node.SelectedImageKey = "texturechunk";
 }
Esempio n. 2
0
        public void SaveP3D(string path)
        {
            BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create));
            String       message;

            // Write header
            writer.Write(MagicWord);
            writer.Write((byte)0x02);
            writer.Write(Size.GetXSize());
            writer.Write(Size.GetYSize());
            writer.Write(Size.GetZSize());

            // Write textures chunk
            message = TextureChunk.WriteChunk(writer);
            if (!message.Equals(String.Empty))
            {
                MessageBox.Show("Saving failed while writing Textures Chunk, Message: " + message);
                return;
            }

            // Write lights chunk
            message = LightsChunk.WriteChunk(writer);
            if (!message.Equals(String.Empty))
            {
                MessageBox.Show("Saving failed while writing Lights Chunk, Message: " + message);
                return;
            }

            // Write meshes chunk
            //MeshesChunk.CalculateMeshChunkSize();
            message = MeshesChunk.WriteChunk(writer);
            if (!message.Equals(String.Empty))
            {
                MessageBox.Show("Saving failed while writing Meshes Chunk, Message: " + message);
                return;
            }

            // Write userdata chunk
            message = UserDataChunk.WriteChunk(writer);
            if (!message.Equals(String.Empty))
            {
                MessageBox.Show("Saving failed while writing User Data Chunk, Message: " + message);
                return;
            }

            writer.Close();
        }
Esempio n. 3
0
        /// <summary>
        /// Reads the chunks for entry.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="entry">The entry.</param>
        private void ReadChunksForEntry(BinaryReader reader, BA2TextureFileEntry entry)
        {
            var chunks = new TextureChunk[entry.NumberOfChunks];

            for (int i = 0; i < entry.NumberOfChunks; i++)
            {
                TextureChunk chunk = new TextureChunk()
                {
                    Offset         = reader.ReadUInt64(),
                    PackedLength   = reader.ReadUInt32(),
                    UnpackedLength = reader.ReadUInt32(),
                    StartMipmap    = reader.ReadUInt16(),
                    EndMipmap      = reader.ReadUInt16(),
                    Unknown        = reader.ReadUInt32()
                };

                chunks[i] = chunk;
            }

            entry.Chunks = chunks;
        }
Esempio n. 4
0
        public void Load(byte[] data)
        {
            int dataOffset = 0;

            var header = new Header();

            header.Load(data, ref dataOffset);

            for (int i = 0; i < header.ChunkCount; i++)
            {
                BaseChunk baseChunk;

                //Read the first four bytes to get the tag.
                string tagName = FSHelpers.ReadString(data, dataOffset, 4);

                switch (tagName)
                {
                case "INF1":
                    baseChunk = new InfoChunk();
                    Info      = baseChunk as InfoChunk;
                    break;

                case "VTX1":
                    baseChunk = new VertexChunk();
                    Vertexes  = baseChunk as VertexChunk;
                    break;

                case "EVP1":
                    baseChunk = new EnvelopeChunk();
                    Envelopes = baseChunk as EnvelopeChunk;
                    break;

                case "DRW1":
                    baseChunk = new DrawChunk();
                    Draw      = baseChunk as DrawChunk;
                    break;

                case "JNT1":
                    baseChunk = new JointChunk();
                    Joints    = baseChunk as JointChunk;
                    break;

                case "SHP1":
                    baseChunk = new ShapeChunk();
                    Shapes    = baseChunk as ShapeChunk;
                    break;

                case "TEX1":
                    baseChunk = new TextureChunk();
                    Textures  = baseChunk as TextureChunk;
                    break;

                case "MAT3":
                    baseChunk = new Material3Chunk();
                    Materials = baseChunk as Material3Chunk;
                    break;

                case "ANK1":
                default:
                    Console.WriteLine("Found unknown chunk {0}!", tagName);
                    baseChunk = new DefaultChunk();
                    break;
                }

                baseChunk.Load(data, ref dataOffset);
            }
        }
Esempio n. 5
0
 public TextureChunkBox(TextureChunk chunk)
 {
     tbcTabs      = new TabControl();
     tbcTabs.Dock = DockStyle.Fill;
     {
         MysteryBox mystery = new MysteryBox(chunk.Data);
         mystery.Dock = DockStyle.Fill;
         TabPage page = new TabPage("Hex");
         page.Controls.Add(mystery);
         tbcTabs.TabPages.Add(page);
     }
     {
         Bitmap     bitmap = new Bitmap(512, 128, PixelFormat.Format16bppArgb1555);
         Rectangle  brect  = new Rectangle(Point.Empty, bitmap.Size);
         BitmapData bdata  = bitmap.LockBits(brect, ImageLockMode.WriteOnly, PixelFormat.Format16bppArgb1555);
         try
         {
             for (int y = 0; y < 128; y++)
             {
                 for (int x = 0; x < 512; x++)
                 {
                     byte color = chunk.Data[x + y * 512];
                     color >>= 3;
                     short color16 = PixelConv.Pack1555(1, color, color, color);
                     System.Runtime.InteropServices.Marshal.WriteInt16(bdata.Scan0, x * 2 + y * bdata.Stride, color16);
                 }
             }
         }
         finally
         {
             bitmap.UnlockBits(bdata);
         }
         PictureBox picture = new PictureBox();
         picture.Dock  = DockStyle.Fill;
         picture.Image = bitmap;
         TabPage page = new TabPage("Monochrome 8");
         page.Controls.Add(picture);
         tbcTabs.TabPages.Add(page);
         tbcTabs.SelectedTab = page;
     }
     {
         Bitmap     bitmap = new Bitmap(256, 128, PixelFormat.Format16bppArgb1555);
         Rectangle  brect  = new Rectangle(Point.Empty, bitmap.Size);
         BitmapData bdata  = bitmap.LockBits(brect, ImageLockMode.WriteOnly, PixelFormat.Format16bppArgb1555);
         try
         {
             for (int y = 0; y < 128; y++)
             {
                 for (int x = 0; x < 256; x++)
                 {
                     short color = BitConv.FromInt16(chunk.Data, x * 2 + y * 512);
                     byte  alpha;
                     byte  red;
                     byte  green;
                     byte  blue;
                     PixelConv.Unpack1555(color, out alpha, out blue, out green, out red);
                     color = PixelConv.Pack1555(1, red, green, blue);
                     System.Runtime.InteropServices.Marshal.WriteInt16(bdata.Scan0, x * 2 + y * bdata.Stride, color);
                 }
             }
         }
         finally
         {
             bitmap.UnlockBits(bdata);
         }
         PictureBox picture = new PictureBox();
         picture.Dock  = DockStyle.Fill;
         picture.Image = bitmap;
         TabPage page = new TabPage("BGR555");
         page.Controls.Add(picture);
         tbcTabs.TabPages.Add(page);
     }
     Controls.Add(tbcTabs);
 }
Esempio n. 6
0
        ///<summary>
        ///Initializes all the chunk classes and adds them to a hashtable
        ///for lookup and retrieval based on their chunk ID;
        ///</summary>
        private void initializeChunks()
        {
            Chunk meshChunk                     = new MeshChunk();
            Chunk hierarchyChunk                = new HierarchyChunk();
            Chunk hierarchyHeaderChunk          = new HierarchyHeaderChunk();
            Chunk pivotsChunk                   = new PivotsChunk();
            Chunk pivotFixupsChunk              = new PivotFixupsChunk();
            Chunk hlodChunk                     = new HlodChunk();
            Chunk hlodHeaderChunk               = new HlodHeaderChunk();
            Chunk hlodLodArrayChunk             = new HlodLodArrayChunk();
            Chunk hlodSubObjectArrayHeaderChunk = new HlodSubObjectArrayHeaderChunk();
            Chunk hlodSubObjectChunk            = new HlodSubObjectChunk();
            Chunk hlodProxyArrayChunk           = new HLodProxyArrayChunk();
            Chunk meshHeader3Chunk              = new MeshHeader3Chunk();
            Chunk verticesChunk                 = new VerticesChunk();
            Chunk vertexNormalsChunk            = new VertexNormalsChunk();
            Chunk trianglesChunk                = new TrianglesChunk();
            Chunk vertexShadeIndicesChunk       = new VertexShadeIndicesChunk();
            Chunk materialInfoChunk             = new MaterialInfoChunk();
            Chunk vertexMaterialsChunk          = new VertexMaterialsChunk();
            Chunk vertexMaterialChunk           = new VertexMaterialChunk();
            Chunk vertexMaterialNameChunk       = new VertexMaterialNameChunk();
            Chunk vertexMaterialInfoChunk       = new VertexMaterialInfoChunk();
            Chunk shadersChunk                  = new ShadersChunk();
            Chunk texturesChunk                 = new TexturesChunk();
            Chunk textureChunk                  = new TextureChunk();
            Chunk textureNameChunk              = new TextureNameChunk();
            Chunk textureInfoChunk              = new TextureInfoChunk();
            Chunk materialPassChunk             = new MaterialPassChunk();
            Chunk vertexMaterialIdsChunk        = new VertexMaterialIdsChunk();
            Chunk shaderIdsChunk                = new ShaderIdsChunk();
            Chunk textureStageChunk             = new TextureStageChunk();
            Chunk textureIdsChunk               = new TextureIdsChunk();
            Chunk stageTexCoordsChunk           = new StageTexCoordsChunk();
            Chunk aabTreeChunk                  = new AabTreeChunk();
            Chunk aabTreeHeaderChunk            = new AabTreeHeaderChunk();
            Chunk aabTreePolyIndicesChunk       = new AabTreePolyIndicesChunk();
            Chunk aabTreeNodesChunk             = new AabTreeNodesChunk();
            Chunk aggregateChunk                = new AggregateChunk();
            Chunk aggregateHeaderChunk          = new AggregateHeaderChunk();
            Chunk aggregateInfoChunk            = new AggregateInfoChunk();
            Chunk aggregateClassInfoChunk       = new AggregateClassInfoChunk();
            Chunk textureReplacerChunk          = new TextureReplacerChunk();
            Chunk vertexMapperArgs0Chunk        = new VertexMapperArgs0Chunk();
            Chunk vertexMapperArgs1Chunk        = new VertexMapperArgs1Chunk();
            Chunk animationChunk                = new AnimationChunk();
            Chunk animationHeaderChunk          = new AnimationHeaderChunk();
            Chunk animationChannelChunk         = new AnimationChannelChunk();
            Chunk bitChannelChunk               = new BitChannelChunk();
            Chunk emitterChunk                  = new EmitterChunk();
            Chunk emitterHeaderChunk            = new EmitterHeaderChunk();
            Chunk emitterUserDataChunk          = new EmitterUserDataChunk();
            Chunk emitterInfoChunk              = new EmitterInfoChunk();
            Chunk emitterInfo2Chunk             = new EmitterInfo2Chunk();
            Chunk emitterPropsChunk             = new EmitterPropsChunk();
            Chunk emitterRotationKeyframesChunk = new EmitterRotationKeyFramesChunk();
            Chunk emitterFrameKeyFramesChunk    = new EmitterFrameKeyFramesChunk();
            Chunk emitterBlurTimeKeyFramesChunk = new EmitterBlurTimeKeyFramesChunk();
            Chunk emitterLinePropertiesChunk    = new EmitterLinePropertiesChunk();
            Chunk vertexInfluencesChunk         = new VertexInfluencesChunk();
            Chunk dcgChunk                        = new DcgChunk();
            Chunk hModelChunk                     = new HModelChunk();
            Chunk hModelHeaderChunk               = new HModelHeaderChunk();
            Chunk hModelAuxDataChunk              = new HModelAuxDataChunk();
            Chunk nodeChunk                       = new NodeChunk();
            Chunk compressedAnimationChunk        = new CompressedAnimationChunk();
            Chunk compressedAnimationHeaderChunk  = new CompressedAnimationHeaderChunk();
            Chunk compressedAnimationChannelChunk = new CompressedAnimationChannelChunk();
            Chunk compressedBitChannelChunk       = new CompressedBitChannelChunk();
            Chunk hLodAggregateArrayChunk         = new HLodAggregateArrayChunk();
            Chunk prelitUnlitChunk                = new PrelitUnlitChunk();
            Chunk prelitVertexChunk               = new PrelitVertexChunk();
            Chunk prelitLightMultiPassChunk       = new PrelitLightMultiPassChunk();
            Chunk prelitLightMultiTextureChunk    = new PrelitLightMultiTextureChunk();
            Chunk meshUserTextChunk               = new MeshUserTextChunk();
            Chunk collectionChunk                 = new CollectionChunk();
            Chunk collectionHeaderChunk           = new CollectionHeaderChunk();
            Chunk collectionObjectNameChunk       = new CollectionObjectNameChunk();
            Chunk placeholderChunk                = new PlaceholderChunk();
            Chunk transformNodeChunk              = new TransformNodeChunk();
            Chunk dazzleChunk                     = new DazzleChunk();
            Chunk dazzleNameChunk                 = new DazzleNameChunk();
            Chunk dazzleTypeNameChunk             = new DazzleTypeNameChunk();
            Chunk boxChunk                        = new BoxChunk();
            Chunk deformChunk                     = new DeformChunk();
            Chunk deformSetChunk                  = new DeformSetChunk();
            Chunk deformKeyframeChunk             = new DeformKeyframeChunk();
            Chunk deformDataChunk                 = new DeformDataChunk();

            //Animation
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_ANIMATION, animationChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_ANIMATION_HEADER, animationHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_ANIMATION_CHANNEL, animationChannelChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_BIT_CHANNEL, bitChannelChunk);

            // Aggregate
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AGGREGATE, aggregateChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AGGREGATE_HEADER, aggregateHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AGGREGATE_INFO, aggregateInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AGGREGATE_CLASS_INFO, aggregateClassInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_REPLACER_INFO, textureReplacerChunk);

            //Collection
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COLLECTION, collectionChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COLLECTION_HEADER, collectionHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COLLECTION_OBJ_NAME, collectionObjectNameChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PLACEHOLDER, placeholderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TRANSFORM_NODE, transformNodeChunk);

            //Compressed Animation
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COMPRESSED_ANIMATION, compressedAnimationChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COMPRESSED_ANIMATION_HEADER, compressedAnimationHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COMPRESSED_ANIMATION_CHANNEL, compressedAnimationChannelChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COMPRESSED_BIT_CHANNEL, compressedBitChannelChunk);

            //Dazzle
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DAZZLE, dazzleChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DAZZLE_NAME, dazzleNameChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DAZZLE_TYPENAME, dazzleTypeNameChunk);

            //Deform
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DEFORM, deformChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DEFORM_SET, deformSetChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DEFORM_KEYFRAME, deformKeyframeChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DEFORM_DATA, deformDataChunk);

            //Emitter
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER, emitterChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_HEADER, emitterHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_USER_DATA, emitterUserDataChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_INFO, emitterInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_INFOV2, emitterInfo2Chunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_PROPS, emitterPropsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_LINE_PROPERTIES, emitterLinePropertiesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES, emitterRotationKeyframesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_FRAME_KEYFRAMES, emitterFrameKeyFramesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES, emitterBlurTimeKeyFramesChunk);

            // Mesh
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MESH, meshChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MESH_HEADER3, meshHeader3Chunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTICES, verticesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_NORMALS, vertexNormalsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TRIANGLES, trianglesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_SHADE_INDICES, vertexShadeIndicesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MATERIAL_INFO, materialInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MESH_USER_TEXT, meshUserTextChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIALS, vertexMaterialsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIAL, vertexMaterialChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIAL_NAME, vertexMaterialNameChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIAL_INFO, vertexMaterialInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_SHADERS, shadersChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURES, texturesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE, textureChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_NAME, textureNameChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_INFO, textureInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MATERIAL_PASS, materialPassChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_STAGE, textureStageChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_IDS, textureIdsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_STAGE_TEXCOORDS, stageTexCoordsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIAL_IDS, vertexMaterialIdsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MAPPER_ARGS0, vertexMapperArgs0Chunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MAPPER_ARGS1, vertexMapperArgs1Chunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_SHADER_IDS, shaderIdsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_INFLUENCES, vertexInfluencesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AABTREE, aabTreeChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AABTREE_HEADER, aabTreeHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AABTREE_POLYINDICES, aabTreePolyIndicesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AABTREE_NODES, aabTreeNodesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DCG, dcgChunk);

            //Primitives
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_BOX, boxChunk);

            //Hierarchy
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HIERARCHY, hierarchyChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HIERARCHY_HEADER, hierarchyHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PIVOTS, pivotsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PIVOT_FIXUPS, pivotFixupsChunk);

            //HLod
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD, hlodChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_HEADER, hlodHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_LOD_ARRAY, hlodLodArrayChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_SUB_OBJECT_ARRAY_HEADER, hlodSubObjectArrayHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_SUB_OBJECT, hlodSubObjectChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_AGGREGATE_ARRAY, hLodAggregateArrayChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_PROXY_ARRAY, hlodProxyArrayChunk);

            //HModel
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HMODEL, hModelChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HMODEL_HEADER, hModelHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HMODEL_AUX_DATA, hModelAuxDataChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_NODE, nodeChunk);

            //Optional
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PRELIT_UNLIT, prelitUnlitChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PRELIT_VERTEX, prelitVertexChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS, prelitLightMultiPassChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE, prelitLightMultiTextureChunk);
        }
Esempio n. 7
0
        public async Task LoadP3D(Stream data)
        {
            using (var reader = new BinaryReader(data))
            {
                reader.BaseStream.Position = 0;
                bool success;

                byte[] magicWord = reader.ReadBytes(3);
                if (!Utility.ByteArrayCompare(magicWord, MagicWord))
                {
                    MessageBox.Show("Magic word isn't valid, got " + Encoding.ASCII.GetString(magicWord) + " Should be: " + Encoding.ASCII.GetString(MagicWord));
                    return;
                }

                Version = reader.ReadByte();
                //MessageBox.Show("Version: " + version.ToString());

                Size = new Extent
                {
                    XSize          = reader.ReadSingle(),
                    YSize          = reader.ReadSingle(),
                    ZSize          = reader.ReadSingle(),
                    IsImportedSize = true
                };

                //MessageBox.Show(size.xSize.ToString() + " - " + size.ySize.ToString() + " - " + size.zSize.ToString());

                StatusUpdated(new StatusUpdatedEventArguments("Loading textures info from file", 25));
                await Task.Delay(0).ConfigureAwait(false);

                TextureChunk = new TextureChunk(this);
                byte[] texHeader = reader.ReadBytes(3);
                if (!Utility.ByteArrayCompare(texHeader, TextureChunk.ChunkIdTemplate))
                {
                    StatusUpdated(new StatusUpdatedEventArguments("Failed to load file", 0));
                    MessageBox.Show("Expected TEX chunk header, got " + Encoding.ASCII.GetString(texHeader));
                    return;
                }

                TextureChunk.Size   = reader.ReadInt32();
                TextureChunk.TexNum = reader.ReadByte();


                success = TextureChunk.ReadChunk(reader);
                if (!success)
                {
                    StatusUpdated(new StatusUpdatedEventArguments("Failed to load file", 0));
                    MessageBox.Show("Couldn't parse Textures chunk");
                    return;
                }

                StatusUpdated(new StatusUpdatedEventArguments("Loading lights from file", 40));
                await Task.Delay(0).ConfigureAwait(false);

                LightsChunk = new LightsChunk(this);
                byte[] lightsHeader = reader.ReadBytes(6);
                if (!Utility.ByteArrayCompare(lightsHeader, LightsChunk.ChunkIdTemplate))
                {
                    StatusUpdated(new StatusUpdatedEventArguments("Failed to load file", 0));
                    MessageBox.Show("Expected LIGHTS chunk header, got " + Encoding.ASCII.GetString(lightsHeader));
                    return;
                }

                LightsChunk.Size      = reader.ReadInt32();
                LightsChunk.LightsNum = reader.ReadInt16();

                success = LightsChunk.ReadChunk(reader);
                if (!success)
                {
                    StatusUpdated(new StatusUpdatedEventArguments("Failed to load file", 0));
                    MessageBox.Show("Couldn't parse Lights chunk");
                    return;
                }

                StatusUpdated(new StatusUpdatedEventArguments("Loading meshes from file", 40));
                await Task.Delay(0).ConfigureAwait(false);

                MeshesChunk = new MeshesChunk(this);
                byte[] meshesHeader = reader.ReadBytes(6);
                if (!Utility.ByteArrayCompare(meshesHeader, MeshesChunk.ChunkIdTemplate))
                {
                    StatusUpdated(new StatusUpdatedEventArguments("Failed to load file", 0));
                    MessageBox.Show("Expected MESHES chunk header, got " + Encoding.ASCII.GetString(meshesHeader));
                    return;
                }

                MeshesChunk.Size      = reader.ReadInt32();
                MeshesChunk.MeshesNum = reader.ReadInt16();


                success = await MeshesChunk.ReadChunk(reader);

                if (!success)
                {
                    StatusUpdated(new StatusUpdatedEventArguments("Failed to load file", 0));
                    MessageBox.Show("Couldn't parse Meshes chunk");
                    return;
                }


                MeshesChunk.SeparateSubMeshesEdges();
                MeshesChunk.SeparateUVVertices();
                MeshesChunk.ClearUnusedVertices();


                StatusUpdated(new StatusUpdatedEventArguments("Loading userdata from file", 80));
                await Task.Delay(0).ConfigureAwait(false);

                UserDataChunk = new UserDataChunk(this);
                byte[] userDataHeader = reader.ReadBytes(4);
                if (!Utility.ByteArrayCompare(userDataHeader, UserDataChunk.ChunkIdTemplate))
                {
                    StatusUpdated(new StatusUpdatedEventArguments("Failed to load file", 0));
                    MessageBox.Show("Expected USER chunk header, got " + Encoding.ASCII.GetString(userDataHeader));
                    return;
                }
                UserDataChunk.Size     = reader.ReadInt32();
                UserDataChunk.UserData = reader.ReadBytes(UserDataChunk.Size);

                StatusUpdated(new StatusUpdatedEventArguments("Finished loading", 100));
                await Task.Delay(0).ConfigureAwait(false);

                reader.Close();
            }
        }
Esempio n. 8
0
        //        public void LoadP3DAssimp(Scene scene)
        //        {
        //            Version = 0x02;
        //            Size = new Extent();
        //
        //            TextureChunk = new TextureChunk(this);
        //            foreach (Material mat in scene.Materials)
        //            {
        //                if (!TextureChunk.IsTextureInList(mat.TextureDiffuse.FilePath.ToLower()))
        //                {
        //                    TextureChunk.TextureNames.Add(new TextureName(TextureChunk,mat.TextureDiffuse.FilePath.ToLower()));
        //                }
        //            }
        //            TextureChunk.CalculateSizeFromTexturesList();
        //            TextureChunk.CalculateTexNum();
        //
        //            LightsChunk = new LightsChunk(this);
        //            foreach (Assimp.Light light in scene.Lights)
        //            {
        //                string name = light.Name;
        //                float x = light.Position.X;
        //                float y = light.Position.Y;
        //                float z = light.Position.Z;
        //                float radius = 1; //ASSIMP doesn't save point light radius
        //                int color = LightsChunk.ColorFromRGB(Convert.ToInt32(light.ColorDiffuse.R*255), Convert.ToInt32(light.ColorDiffuse.G * 255), Convert.ToInt32(light.ColorDiffuse.B * 255));
        //                bool corona = false;
        //                bool lensFlare = false;
        //                bool lightUpEnv = true;
        //                LightsChunk.Lights.Add(new DataTypes.Light(LightsChunk, name, x, y, z, radius, color, corona, lensFlare, lightUpEnv));
        //            }
        //            LightsChunk.CalculateSizeFromLightsList();
        //            LightsChunk.CalculateLightsNum();
        //
        //            MeshesChunk = new MeshesChunk(this);
        //            MeshesChunk.MeshesNum = Convert.ToInt16(scene.MeshCount);
        //            MeshesChunk.Size = 0;
        //            //MessageBox.Show(scene.RootNode.Name);
        //            foreach (Assimp.Mesh mesh in scene.Meshes)
        //            {
        //               //MessageBox.Show();
        //            }
        //        }

        public void Load3DS(Lib3dsFile scene)
        {
            Version = 0x02;
            Size    = new Extent();

            TextureChunk = new TextureChunk(this);
            foreach (Lib3dsMaterial mat in scene.materials)
            {
                if (mat.texture1_map.name.ToLower().Equals(String.Empty))
                {
                    continue;
                }
                if (!TextureChunk.IsTextureInList(mat.texture1_map.name.ToLower()))
                {
                    TextureChunk.TextureNames.Add(new TextureName(TextureChunk, mat.texture1_map.name.ToLower()));
                }
            }
            if (TextureChunk.TextureNames.Count == 0)
            {
                TextureChunk.TextureNames.Add(new TextureName(TextureChunk, "colwhite.tga"));
            }
            TextureChunk.CalculateSizeFromTexturesList();
            TextureChunk.CalculateTexNum();

            LightsChunk = new LightsChunk(this);
            foreach (Lib3dsLight light in scene.lights)
            {
                string name       = light.name;
                float  x          = light.position[0];
                float  y          = light.position[2];
                float  z          = light.position[1];
                float  radius     = light.inner_range;
                int    color      = LightsChunk.ColorFromRGB(Convert.ToInt32(light.color[0] * 255), Convert.ToInt32(light.color[1] * 255), Convert.ToInt32(light.color[2] * 255));
                bool   corona     = false;
                bool   lensFlare  = false;
                bool   lightUpEnv = true;
                LightsChunk.Lights.Add(new DataTypes.Light(LightsChunk, name, x, y, z, radius, color, corona, lensFlare, lightUpEnv));
            }
            LightsChunk.CalculateSizeFromLightsList();
            LightsChunk.CalculateLightsNum();

            MeshesChunk           = new MeshesChunk(this);
            MeshesChunk.MeshesNum = Convert.ToInt16(scene.meshes.Count);
            MeshesChunk.Size      = 0;
            //MessageBox.Show(scene.RootNode.Name);
            foreach (Lib3dsMesh mesh in scene.meshes)
            {
                Mesh newMesh = new Mesh(MeshesChunk);
                newMesh.Parse3DSMesh(scene, mesh);
                newMesh.SortPolygonsAndGenerateTextureInfo();
                newMesh.SeparateHardEdges();
                newMesh.SeparateUVVertices();
                newMesh.CalculateExtent();
                MeshesChunk.Meshes.Add(newMesh);
            }

            //MeshesChunk.SeparateSubMeshesEdges();
            MeshesChunk.ClearUnusedVertices();
            MeshesChunk.CheckFlagsValidity();
            MeshesChunk.CalculateMeshChunkSize();
            P3DVertex origin = MeshesChunk.CalculateMeshesLocalPos();

            MeshesChunk.MoveMeshesToOrigin();
            LightsChunk.CalculateLightsPostionRelativeToOrigin(origin);

            Size.CalculateExtentFromMeshes(MeshesChunk.Meshes);

            UserDataChunk          = new UserDataChunk(this);
            UserDataChunk.Size     = 4;
            UserDataChunk.UserData = new byte[] { 0, 0, 0, 0 };
        }
Esempio n. 9
0
 public TextureName(TextureChunk parent, string name)
 {
     Parent = parent;
     Name   = name;
     Application.Current.Dispatcher.BeginInvoke((Action)(() => addTreeItem()));
 }