Example #1
0
        private static Model LoadFromBIN(string pModelFile)
        {
            BinaryReader reader = new BinaryReader(new FileStream(pModelFile, FileMode.Open));

            int numberOfVertices = reader.ReadInt32();
            int floatsPerVertex = 6;

            Vertices = new float[numberOfVertices * floatsPerVertex];

            byte[]  byteArray = new byte[Vertices.Length * sizeof(float)];
            byteArray = reader.ReadBytes(byteArray.Length);

            Buffer.BlockCopy(byteArray, 0, Vertices, 0, byteArray.Length);

            int numberOfTriangles = reader.ReadInt32();

            Indices = new int[numberOfTriangles * 3];

            byteArray = new byte[Indices.Length * sizeof(int)];
            byteArray = reader.ReadBytes(Indices.Length * sizeof(int));
            Buffer.BlockCopy(byteArray, 0, Indices, 0, byteArray.Length);

            reader.Close();

            ModelMesh mesh = new ModelMesh(Vertices, Indices, false);
            List<ModelMesh> meshes = new List<ModelMesh>();
            meshes.Add(mesh);
            return new Model(meshes);
        }
Example #2
0
        public static void LoadModel(string filename, out List<ModelMesh> outMeshes)
        {
            ParseModel(filename);

            List<float> verts = new List<float>();
            List<int> indices = new List<int>();

            List<ModelMesh> meshes = new List<ModelMesh>();

            for (int i = 0; i < _meshes.Count; i++)
            {
                verts.Clear();
                indices.Clear();
                for (int j = 0; j < _meshes[i].Count; j++)
                {
                    Face face = _meshes[i][j];
                    for (int k = 0; k < 3; k++)
                    {
                        verts.Add(face.Positions[k].X);
                        verts.Add(face.Positions[k].Y);
                        verts.Add(face.Positions[k].Z);

                        verts.Add(face.Normals[k].X);
                        verts.Add(face.Normals[k].Y);
                        verts.Add(face.Normals[k].Z);

                        verts.Add(face.TextureUVs[k].X);
                        verts.Add(face.TextureUVs[k].Y);
                    }
                }

                for (int j = 0; j < verts.Count / 6; j++)
                {
                    indices.Add(j);
                }

                ModelMesh mesh = new ModelMesh(verts.ToArray(), indices.ToArray(), true);
                mesh.SetMaterial(_materialLibrary[_meshes[i][0].MaterialLibrary][_meshes[i][0].MaterialName]);
                meshes.Add(mesh);
            }

            outMeshes = meshes;

            _positions.Clear();
            _normals.Clear();
            _textureUVs.Clear();
            _meshes.Clear();
            _materialLibrary.Clear();
        }
Example #3
0
        public static void RenderModelMesh(ModelMesh mesh, Matrix4 matrix, int offset, int count, Color4 color)
        {
            SetColor(color);
            Texture.BindNone();
            Lighting.EnableLighting();
            if (_currentVao != mesh.GetVaoID())
            {
                mesh.BindVAO();
                _currentVao = mesh.GetVaoID();
            }
            int uModelLocation = _currentShader.GetUniformLocation("uModel");
            GL.UniformMatrix4(uModelLocation, true, ref matrix);

            if (_worldMatrixChanged)
            {
                int uWorldLocation = _currentShader.GetUniformLocation("uWorld");
                Matrix4 worldMatrix = _worldMatrixStack.Count > 0 ? (Matrix4)_worldMatrixStack.Peek() : _worldMatrix;
                GL.UniformMatrix4(uWorldLocation, true, ref worldMatrix);
                Lighting.ApplyLightMatrix(worldMatrix);
            }

            GL.DrawElements(PrimitiveType.Triangles, count, DrawElementsType.UnsignedInt, offset * sizeof(uint));
            Lighting.DisableLighting();
        }
Example #4
0
 public static void RenderModelMesh(ModelMesh mesh, Matrix4 matrix, int offset, Color4 color)
 {
     RenderModelMesh(mesh, matrix, offset, mesh.GetIndicesLength() - offset, color);
 }
Example #5
0
 public static void RenderModelMesh(ModelMesh mesh, Matrix4 matrix, Color4 color)
 {
     RenderModelMesh(mesh, matrix, 0, color);
 }
Example #6
0
        private static Model LoadFromSJG(string pModelFile)
        {
            StreamReader reader;
            reader = new StreamReader(pModelFile);
            string line = reader.ReadLine(); // vertex format
            int numberOfVertices = 0;
            int floatsPerVertex = 6;
            if (!int.TryParse(reader.ReadLine(), out numberOfVertices))
            {
                throw new Exception("Error when reading number of vertices in model file " + pModelFile);
            }

            Vertices = new float[numberOfVertices * floatsPerVertex];

            string[] values;
            for (int i = 0; i < Vertices.Length; )
            {
                line = reader.ReadLine();
                values = line.Split(',');
                foreach(string s in values)
                {
                    if (!float.TryParse(s, out Vertices[i]))
                    {
                        throw new Exception("Error when reading vertices in model file " + pModelFile + " " + s + " is not a valid number");
                    }
                    ++i;
                }
            }

            reader.ReadLine();
            int numberOfTriangles = 0;
            line = reader.ReadLine();
            if (!int.TryParse(line, out numberOfTriangles))
            {
                throw new Exception("Error when reading number of triangles in model file " + pModelFile);
            }

            Indices = new int[numberOfTriangles * 3];

            for(int i = 0; i < numberOfTriangles * 3;)
            {
                line = reader.ReadLine();
                values = line.Split(',');
                foreach(string s in values)
                {
                    if (!int.TryParse(s, out Indices[i]))
                    {
                        throw new Exception("Error when reading indices in model file " + pModelFile + " " + s + " is not a valid index");
                    }
                    ++i;
                }
            }

            reader.Close();

            ModelMesh mesh = new ModelMesh(Vertices, Indices, false);
            List<ModelMesh> meshes = new List<ModelMesh>();
            meshes.Add(mesh);
            return new Model(meshes);
        }