Czytanie pliku .obj

0

Witajcie!
Jestem w trakcie pisania aplikacji powiązaną mocno z OpenGL, ale na płaszczyźnie tych rozważań, nie ma (chyba) to aż takiego znaczenia.
Sprawa wygląda następująco. Korzystam z bibliotek/frameworków. (freeglut + OpenGL + tao.FreeGlut). [Nie wiem do końca po co o tym piszę, ale może są tam jakieś gotowe modele do importu a ja się pocę i męczę niepotrzebnie]
I jestem w momencie, kiedy chce importować plik .obj, a raczej jego zawartość. Wavefront .obj - Wiki
Mam napisany fragment kodu który na razie, jak widać, przyjmuje jego ścieżkę. Otwiera go i leci po każdej kolejnej linii. Najbardziej są mi potrzebne:
-v
-vt
-vn
Chyba f nie jest mi potrzebne, ale szczerze nie korzystałem z tego na razie i nie wiem nawet zbytnio jak działają "twarze"(?).
Ostatecznie, chce dostać. Kolekcje VBO z Vectorami3 no i VBO z Vectorami2. Rozmyślam jak, w najbardziej optymalny sposób, wpisać kolejne wartości do kolejnych Vector3, tak na prawdę potrzebuję tablicy kolejnych Vector3(x, y, z);[Już skupię się na tych Vector3]
Aktualnie, mam tablice string z kolejnymi liczbami. Np poniższy kod drukuje:
1.0 -1.0 -1.0
1.0 -1.0 1.0
itd (pominąłem zera na końcu)
I chce w jak najlepszy sposób i w jak najlepszym stylu "wrzucić" (patrząc na pierwszy podany tutaj wiersz) kolejne liczby do kolejnych wartości Vectora3, a więc Vector3(1.0, -1.0, -1.0) i to ma być pierwszy element tablicy Vectorów3, następny wiersz, następny element tablicy itd.
Pisząc to wpadłem chyba na jeden oczywisty pomysł, ale czekam na Państwa odpowiedzi, chętnie pouczę się i zobaczę może jakieś C# sztuczki czy tym podobne. Bardzo dziękuję z góry za pomoc a poniżej załączam kod.

private void ReadingObj(string objPath)
        { 
            StreamReader streamReader = new StreamReader(objPath);

            string data = streamReader.ReadLine();

            while (data != null)
            {
                if (data.StartsWith("#"))
                {
                    Console.WriteLine("Komenatrz: " + data);
                }

                else if (data.StartsWith("v "))
                {
                    string[] parts = data.Split(' ');
                    float val;

                    int i = 0;

                    parts = parts.Skip(1).ToArray();
                    //Console.WriteLine("Vertex: " + data);
                    foreach (string part in parts)
                    {
                        Console.Write(" ");
                        Console.Write(part);
                    }

                    Console.WriteLine(" ");
                    Console.ReadKey();
                }

                //else if (data.StartsWith("vt"))
                //{
                //    Console.WriteLine("Textures: " + data);
                //}

                //else if (data.StartsWith("vn"))
                //{
                //    Console.WriteLine("Normals: " + data);
                //}

                //else if (data.StartsWith("f"))
                //{
                //    Console.WriteLine("Face: " + data);
                //}

                //else
                //{
                //    Console.WriteLine("Inne informacje: " + data);
                //}


                data = streamReader.ReadLine();
            }          
        }
0

twarze to zbiór indeksów v, vt i vn tworzących wielokąt. Jak dla mnie bardzo potrzebne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1