Пример #1
0
 private void ReadFaceVertexIndex(String text, ref FaceVertexIndex v)
 {
     String[] ints = text.Split('/');
     v.vertex  = int.Parse(ints[0]);
     v.texture = int.Parse(ints[1]);
     v.normal  = int.Parse(ints[2]);
 }
Пример #2
0
            public FaceVertexIndex ReadVertexIndex(BinaryReader reader)
            {
                FaceVertexIndex newVertexIndex = new FaceVertexIndex();

                newVertexIndex.index = reader.ReadUInt16();
                newVertexIndex.link  = reader.ReadUInt16();
                return(newVertexIndex);
            }
Пример #3
0
 private void ReadFaceVertexIndex(String text, ref FaceVertexIndex v)
 {
     String[] ints = text.Split('/');
     v.vertex = int.Parse(ints[0]);
     v.texture = int.Parse(ints[1]);
     v.normal = int.Parse(ints[2]);
 }
Пример #4
0
        public bool Load(String filename)
        {
            StreamReader re = null;
            try
            {
                re = File.OpenText(filename);
            }
            catch
            {
                // can't open file
                return false;
            }

            int line_count = 0;

            do
            {
                String line = null;
                try
                {
                    line = re.ReadLine();
                }
                catch
                {
                    // eof
                    break;
                }
                if (line == null)
                {
                    break;
                }

                line_count++;
                String[] words = line.Split(' ');
                if (words[0] == "v")
                {
                    OpenTK.Vector3 v3;
                    v3.X = float.Parse(words[1]);
                    v3.Y = float.Parse(words[2]);
                    v3.Z = float.Parse(words[3]);
                    vertices.Add(v3);
                }
                else if (words[0] == "vt")
                {
                    OpenTK.Vector2 v2;
                    v2.X = float.Parse(words[1]);
                    v2.Y = 1.0f - float.Parse(words[2]);
                    texcoords.Add(v2);
                }
                else if (words[0] == "vn")
                {
                    OpenTK.Vector3 v3;
                    v3.X = float.Parse(words[1]);
                    v3.Y = float.Parse(words[2]);
                    v3.Z = float.Parse(words[3]);
                    normals.Add(v3);
                }
                else if (words[0] == "f")
                {
                    FaceVertexIndex i1 = new FaceVertexIndex();
                    FaceVertexIndex i2 = new FaceVertexIndex();
                    FaceVertexIndex i3 = new FaceVertexIndex();
                    FaceVertexIndex i4 = new FaceVertexIndex();
                    switch (words.Length)
                    {
                        case 4:
                            // three indices
                            ReadFaceVertexIndex(words[1], ref i1);
                            ReadFaceVertexIndex(words[2], ref i2);
                            ReadFaceVertexIndex(words[3], ref i3);
                            indexes.Add(i1);
                            indexes.Add(i2);
                            indexes.Add(i3);
                            break;
                        case 5:
                            // four indices, quad, two triangles
                            ReadFaceVertexIndex(words[1], ref i1);
                            ReadFaceVertexIndex(words[2], ref i2);
                            ReadFaceVertexIndex(words[3], ref i3);
                            ReadFaceVertexIndex(words[4], ref i4);
                            indexes.Add(i1);
                            indexes.Add(i2);
                            indexes.Add(i3);

                            indexes.Add(i1);
                            indexes.Add(i3);
                            indexes.Add(i4);
                            break;
                        default:
                            Console.WriteLine("Unhandled face index size {0}", words.Length);
                            break;
                    }
                }
            } while (true);

            /*
            foreach (FaceVertexIndex fvi in indexes)
            {
                // Obj indices start at 1
                fvi.vertex -= 1;
                fvi.texture -= 1;
                fvi.normal -= 1;
                Console.WriteLine("{0}, {1}, {2}", fvi.vertex, fvi.texture, fvi.normal);
            }
             */

            is_loaded = true;
            return true;
        }
Пример #5
0
        public bool Load(String filename)
        {
            StreamReader re = null;

            try
            {
                re = File.OpenText(filename);
            }
            catch
            {
                // can't open file
                return(false);
            }

            int line_count = 0;

            do
            {
                String line = null;
                try
                {
                    line = re.ReadLine();
                }
                catch
                {
                    // eof
                    break;
                }
                if (line == null)
                {
                    break;
                }

                line_count++;
                String[] words = line.Split(' ');
                if (words[0] == "v")
                {
                    OpenTK.Vector3 v3;
                    v3.X = float.Parse(words[1]);
                    v3.Y = float.Parse(words[2]);
                    v3.Z = float.Parse(words[3]);
                    vertices.Add(v3);
                }
                else if (words[0] == "vt")
                {
                    OpenTK.Vector2 v2;
                    v2.X = float.Parse(words[1]);
                    v2.Y = 1.0f - float.Parse(words[2]);
                    texcoords.Add(v2);
                }
                else if (words[0] == "vn")
                {
                    OpenTK.Vector3 v3;
                    v3.X = float.Parse(words[1]);
                    v3.Y = float.Parse(words[2]);
                    v3.Z = float.Parse(words[3]);
                    normals.Add(v3);
                }
                else if (words[0] == "f")
                {
                    FaceVertexIndex i1 = new FaceVertexIndex();
                    FaceVertexIndex i2 = new FaceVertexIndex();
                    FaceVertexIndex i3 = new FaceVertexIndex();
                    FaceVertexIndex i4 = new FaceVertexIndex();
                    switch (words.Length)
                    {
                    case 4:
                        // three indices
                        ReadFaceVertexIndex(words[1], ref i1);
                        ReadFaceVertexIndex(words[2], ref i2);
                        ReadFaceVertexIndex(words[3], ref i3);
                        indexes.Add(i1);
                        indexes.Add(i2);
                        indexes.Add(i3);
                        break;

                    case 5:
                        // four indices, quad, two triangles
                        ReadFaceVertexIndex(words[1], ref i1);
                        ReadFaceVertexIndex(words[2], ref i2);
                        ReadFaceVertexIndex(words[3], ref i3);
                        ReadFaceVertexIndex(words[4], ref i4);
                        indexes.Add(i1);
                        indexes.Add(i2);
                        indexes.Add(i3);

                        indexes.Add(i1);
                        indexes.Add(i3);
                        indexes.Add(i4);
                        break;

                    default:
                        Console.WriteLine("Unhandled face index size {0}", words.Length);
                        break;
                    }
                }
            } while (true);

            /*
             * foreach (FaceVertexIndex fvi in indexes)
             * {
             *  // Obj indices start at 1
             *  fvi.vertex -= 1;
             *  fvi.texture -= 1;
             *  fvi.normal -= 1;
             *  Console.WriteLine("{0}, {1}, {2}", fvi.vertex, fvi.texture, fvi.normal);
             * }
             */

            is_loaded = true;
            return(true);
        }