Пример #1
0
        public void Write(GrnNode matSecNode)
        {
            GrnNode matNode = new GrnNode(matSecNode, GrnNodeType.Material);

            matSecNode.AppendChild(matNode);
            GrnMaterialSimpleDiffuseTextureNode matDiffNode =
                new GrnMaterialSimpleDiffuseTextureNode(matNode);

            matDiffNode.TextureMapIndex = this.DiffuseTextureIndex + 1;
            matNode.AppendChild(matDiffNode);
            GrnDataExtensionReferenceNode refNode = new GrnDataExtensionReferenceNode(matNode);

            refNode.DataExtensionIndex = this.DataExtensionIndex + 1;
            matNode.AppendChild(refNode);
        }
Пример #2
0
        public void Write(GrnNode texSecNode)
        {
            GrnNode texMapNode = new GrnNode(texSecNode, GrnNodeType.TextureMap);

            texSecNode.AppendChild(texMapNode);
            GrnNode texImSecNode = new GrnNode(texMapNode, GrnNodeType.TextureImageSection);

            texMapNode.AppendChild(texImSecNode);
            GrnTextureMapImageNode texMapImNode = new GrnTextureMapImageNode(texImSecNode);

            texMapImNode.Width  = this.Width;
            texMapImNode.Height = this.Height;
            texImSecNode.AppendChild(texMapImNode);
            GrnDataExtensionReferenceNode refNode = new GrnDataExtensionReferenceNode(texMapNode);

            refNode.DataExtensionIndex = this.DataExtensionIndex + 1;
            texMapNode.AppendChild(refNode);
        }
Пример #3
0
        public void Write(GrnNode meshSecNode)
        {
            GrnNode meshNode = new GrnNode(meshSecNode, GrnNodeType.Mesh);

            meshSecNode.AppendChild(meshNode);
            GrnNode meshVertSetSecNode = new GrnNode(meshNode, GrnNodeType.MeshVertexSetSection);

            meshNode.AppendChild(meshVertSetSecNode);
            GrnNode meshVertSetNode = new GrnNode(meshVertSetSecNode, GrnNodeType.MeshVertexSet);

            meshVertSetSecNode.AppendChild(meshVertSetNode);

            GrnMeshVerticesNode mVertNode = new GrnMeshVerticesNode(meshVertSetNode);

            mVertNode.Vertices = this.Vertices;
            meshVertSetNode.AppendChild(mVertNode);
            GrnMeshNormalsNode mNormNode = new GrnMeshNormalsNode(meshVertSetNode);

            mNormNode.Normals = this.Normals;
            meshVertSetNode.AppendChild(mNormNode);
            GrnNode meshFieldSecNode = new GrnNode(meshVertSetNode, GrnNodeType.MeshFieldSection);

            meshVertSetNode.AppendChild(meshFieldSecNode);
            GrnMeshFieldNode mFieldNode = new GrnMeshFieldNode(meshFieldSecNode);

            mFieldNode.TextureCoordinates = this.TextureCoordinates;
            meshFieldSecNode.AppendChild(mFieldNode);

            GrnMeshWeightsNode mWeightNode = new GrnMeshWeightsNode(meshNode);

            mWeightNode.VertexWeights = this.VertexWeights;
            meshNode.AppendChild(mWeightNode);
            GrnMeshTrianglesNode mTriNode = new GrnMeshTrianglesNode(meshNode);

            mTriNode.Faces = this.Faces;
            meshNode.AppendChild(mTriNode);
            GrnDataExtensionReferenceNode mDERefNode = new GrnDataExtensionReferenceNode(meshNode);

            mDERefNode.DataExtensionIndex = this.DataExtensionIndex + 1;
            meshNode.AppendChild(mDERefNode);
        }
Пример #4
0
        public void Write(Stream stream)
        {
            using (GrnBinaryWriter writer = new GrnBinaryWriter(stream))
            {
                this.WriteHeader(writer);

                GrnMainNode mainNode = new GrnMainNode();
                mainNode.NumTotalChildNodes = 3;
                this.CreateVerFrameDir(mainNode);

                GrnSectionNode staFrameDir = new GrnSectionNode(mainNode, GrnNodeType.StandardFrameDirectory);
                staFrameDir.Offset = 440;
                mainNode.AppendChild(staFrameDir);

                // 0StringTable
                OrderedDictionary  stringMap    = this.CreateStringMap();
                GrnStringTableNode strTableNode = new GrnStringTableNode(staFrameDir);
                strTableNode.Strings = stringMap.Keys.Cast <string>().ToList();
                staFrameDir.AppendChild(strTableNode);

                // 1DataExtension
                GrnNode dataExtSecNode = new GrnNode(staFrameDir, GrnNodeType.DataExtensionSection);
                staFrameDir.AppendChild(dataExtSecNode);
                this.WriteDataExtensions(dataExtSecNode, stringMap);

                // 2VectorChannel
                GrnNode vecChanSecNode = new GrnNode(staFrameDir, GrnNodeType.VectorChannelSection);
                staFrameDir.AppendChild(vecChanSecNode);

                // 3TransformChannel
                GrnNode traChanSecNode = new GrnNode(staFrameDir, GrnNodeType.TransformChannelSection);
                staFrameDir.AppendChild(traChanSecNode);
                foreach (GrnBone bone in this.Bones)
                {
                    GrnNode traChanNode = new GrnNode(traChanSecNode, GrnNodeType.TransformChannel);
                    traChanSecNode.AppendChild(traChanNode);

                    GrnDataExtensionReferenceNode refNode = new GrnDataExtensionReferenceNode(traChanNode);
                    refNode.DataExtensionIndex = bone.DataExtensionIndex + 1;
                    traChanNode.AppendChild(refNode);
                }

                // 4Mesh
                GrnNode meshSecNode = new GrnNode(staFrameDir, GrnNodeType.MeshSection);
                staFrameDir.AppendChild(meshSecNode);
                foreach (GrnMesh mesh in this.Meshes)
                {
                    mesh.Write(meshSecNode);
                }

                // 5Skeleton
                GrnNode skelSecNode = new GrnNode(staFrameDir, GrnNodeType.SkeletonSection);
                staFrameDir.AppendChild(skelSecNode);
                GrnNode skelNode = new GrnNode(skelSecNode, GrnNodeType.Skeleton);
                skelSecNode.AppendChild(skelNode);
                GrnNode boneSecNode = new GrnNode(skelNode, GrnNodeType.BoneSection);
                skelNode.AppendChild(boneSecNode);
                foreach (GrnBone bone in this.Bones)
                {
                    bone.Write(boneSecNode);
                }

                // 6Texture
                GrnNode texSecNode = new GrnNode(staFrameDir, GrnNodeType.TextureSection);
                staFrameDir.AppendChild(texSecNode);
                foreach (GrnTexture tex in this.Textures)
                {
                    tex.Write(texSecNode);
                }

                // 7Material
                GrnNode matSecNode = new GrnNode(staFrameDir, GrnNodeType.MaterialSection);
                staFrameDir.AppendChild(matSecNode);
                foreach (GrnMaterial mat in this.Materials)
                {
                    mat.Write(matSecNode);
                }

                // 8Form
                GrnNode formSecNode = new GrnNode(staFrameDir, GrnNodeType.FormSection);
                staFrameDir.AppendChild(formSecNode);
                this.WriteForm(formSecNode);

                // 9Model
                GrnNode modelSecNode = new GrnNode(staFrameDir, GrnNodeType.ModelSection);
                staFrameDir.AppendChild(modelSecNode);
                GrnNode modelNode = new GrnNode(modelSecNode, GrnNodeType.Model);
                modelNode.Data = new byte[] { 0x01, 0x00, 0x00, 0x00 };
                modelSecNode.AppendChild(modelNode);
                GrnNode rendPassSecNode = new GrnNode(modelNode, GrnNodeType.RenderPassSection);
                modelNode.AppendChild(rendPassSecNode);
                for (int i = 0; i < this.Meshes.Count; ++i)
                {
                    this.Meshes[i].WriteRenderPass(rendPassSecNode, i);
                }

                // 10Animation
                GrnNode animSecNode = new GrnNode(staFrameDir, GrnNodeType.AnimationSection);
                staFrameDir.AppendChild(animSecNode);
                GrnNode animNode = new GrnNode(animSecNode, GrnNodeType.Animation);
                animSecNode.AppendChild(animNode);
                GrnNode animVecTraSecNode = new GrnNode(animNode, GrnNodeType.AnimationVectorTrackSection);
                animNode.AppendChild(animVecTraSecNode);
                GrnNode animTraTraSecNode = new GrnNode(animNode, GrnNodeType.AnimationTransformTrackSection);
                animNode.AppendChild(animTraTraSecNode);
                for (int i = 0; i < this.Animation.BoneTracks.Count; ++i)
                {
                    this.Animation.BoneTracks[i].Write(animTraTraSecNode, i);
                }

                // 11NullTerminator
                GrnNode nullTermNode = new GrnNode(staFrameDir, GrnNodeType.NullTerminator);
                staFrameDir.AppendChild(nullTermNode);

                GrnSectionNode nullFrameDir = new GrnSectionNode(mainNode, GrnNodeType.NullFrameDirectory);
                mainNode.AppendChild(nullFrameDir);
                nullTermNode = new GrnNode(nullFrameDir, GrnNodeType.NullTerminator);
                nullFrameDir.AppendChild(nullTermNode);

                mainNode.Write(writer);
            }
        }