C ++ - Читать 3D-модель - PullRequest
       41

C ++ - Читать 3D-модель

0 голосов
/ 05 декабря 2011

У меня есть файл, который определяет вершины 3D-модели, нормали и информацию о подключении.

Пример:

v -2.491060 -2.491060 0.000000
v 2.491060 -2.491060 0.000000
v -2.491060 2.491060 0.000000
v 2.491060 2.491060 0.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
f 1/1 2/2 3/3
f 3/3 2/2 4/1

Где:

v          vertex coordinate (x, y, z position)
vt        texture coordinate (u, v coordinate)
f          polygon connectivity information with vertex and texture indices

Как лучше всего хранить и хранить эту информацию? Пользовательский класс / структура, которая имеет внутренний массив каждой вершины и информацию о подключении? Я думаю, что однажды я прочитал данные с разделителями в C ++, но это был тот же тип данных, поэтому я поместил их в многомерный массив. Должен ли я просто использовать stringstreams и пользовательскую структуру / класс, может быть?

РЕДАКТИРОВАТЬ Раскрытие, это для моего класса 3D-графики, но я просто ищу здесь совета, а не полностью написанный проект и т. Д.

1 Ответ

3 голосов
/ 05 декабря 2011

Во-первых, есть один факт, вы должны хранить их в динамических массивах. Как я знаю, wavefront не содержит никакой информации о том, сколько вершин содержится в файле 3D-Obj. То же для вершинных нормалей, текстурных координат и граней.

Так что я бы склонялся читать их (вершины, нормали и т. Д.) В структуры и удалять их после определения ваших треугольников. Stringstreams и пользовательские структуры звучат хорошо для меня, поэтому вы можете использовать регулярные выражения для считывания необходимых данных вершин / граней.

Я Java-программист (не слишком длинный), поэтому извините, если я ошибаюсь: /

Возможно, это немного сложная версия моего загрузчика .obj в моем проекте: https://github.com/Chrise55/Llama3D/blob/master/src/llama/zoo1/llgeometry/LLLoadGeometry.java Это Java, но, возможно, это может помочь вам? : /

...