コード例 #1
0
 internal void addFaceMat(FaceMat3ds fm)
 {
     mFaceMat.Add(fm);
 }
コード例 #2
0
        public override Scene ImportFile(FileStream fileStream, string fileName)
        {
            Scene3ds scene3ds = new Scene3ds(fileStream, null, Scene3ds.DECODE_ALL);

            Scene result = new Scene();

            // Compute normals for our scene
            computeNormals(scene3ds, result);

            Material defaultMaterial = new Material
            {
                Name          = "Default",
                FileName      = fileName,
                DiffuseColor  = ColorsRgbF.Gray,
                SpecularColor = ColorsRgbF.White,
                Shininess     = 64
            };

            for (int i = 0; i < scene3ds.Materials.Count(); ++i)
            {
                Material3ds material3ds = scene3ds.Materials.ElementAt(i);
                Material    material    = new Material
                {
                    Name          = material3ds.name(),
                    FileName      = fileName,
                    DiffuseColor  = material3ds.diffuse().ToColorRgbF(),
                    AmbientColor  = material3ds.ambient().ToColorRgbF(),
                    SpecularColor = material3ds.specular().ToColorRgbF(),
                    Transparency  = material3ds.transparency()
                };
                if (material3ds.DiffuseTexture != null)
                {
                    material.DiffuseTextureName = Path.Combine(Path.GetDirectoryName(fileName), material3ds.DiffuseTexture.MapName);
                }
                if ((int)material3ds._shininess != 0)
                {
                    material.Shininess = (int)material3ds._shininess;
                }
                result.Materials.Add(material);
            }

            for (int i = 0; i < scene3ds.Meshes.Count(); ++i)
            {
                Mesh3ds mesh3ds = scene3ds.Meshes.ElementAt(i);

                Mesh resultMesh = result.Meshes[i];

                //resultMesh.Material = defaultMaterial;

                // TODO: Is this right?
                if (mesh3ds.faceMats() == 0)
                {
                    resultMesh.Material = defaultMaterial;

                    for (int fi = 0; fi < mesh3ds.faces(); ++fi)
                    {
                        Face3ds f = mesh3ds.face(fi);


                        resultMesh.Indices.Add(f.P0);
                        resultMesh.Indices.Add(f.P1);
                        resultMesh.Indices.Add(f.P2);
                    }
                }
                else
                {
                    // TODO: Split by face materials so that each mesh only has one material.
                    Debug.Assert(mesh3ds.faceMats() == 1);
                    for (int fm = 0; fm < mesh3ds.faceMats(); ++fm)
                    {
                        // Get current material's face.
                        FaceMat3ds fmat     = mesh3ds.faceMat(fm);
                        Material   material = result.Materials[fmat.material()];
                        resultMesh.Material = material;

                        for (int fi = 0; fi < fmat.faces(); ++fi)
                        {
                            int     idx = fmat.face(fi);
                            Face3ds f   = mesh3ds.face(idx);


                            resultMesh.Indices.Add(f.P0);
                            resultMesh.Indices.Add(f.P1);
                            resultMesh.Indices.Add(f.P2);
                        }
                    }
                }
            }

            return(result);
        }
コード例 #3
0
ファイル: Mesh3ds.cs プロジェクト: bondehagen/meshellator
 internal void addFaceMat(FaceMat3ds fm)
 {
     mFaceMat.Add(fm);
 }
コード例 #4
0
ファイル: Scene3ds.cs プロジェクト: bondehagen/meshellator
        private void read_MSH_MAT_GROUP(Mesh3ds mes)
        {
            string name = ReadName();

            FaceMat3ds fm = new FaceMat3ds();
            mes.addFaceMat(fm);

            for (int i = 0; i < Materials.Count(); i++)
            {
                if (Materials.ElementAt(i).name().Equals(name) == true)
                {
                    fm.mMatIndex = i;
                    break;
                }
            }

            int indexes = ReadUnsignedShort();
            fm.mFaceIndex = new int[indexes];

            for (int n = 0; n < indexes; n++)
            {
                fm.mFaceIndex[n] = ReadUnsignedShort();
            }

            if (mDecode != null)
            {
                mDecode.enter();
                mDecode.println("Faces: " + indexes);
                for (int t = 0; t < indexes; t++)
                {
                    mDecode.println("  face: " + fm.mFaceIndex[t]);
                }
                mDecode.leave();
            }
        }