Импорт 3ds формата.
Прочитать файл, и отобразить его в OpenGL с текстурой и всеми делами не проблема.
Но я хочу построить mesh объект, чтобы в последствии засунуть его в физический движок (ode).
Открыла графический редактор, нарисовала простой куб, распечатала результат парсинга. Получила 20 вершин (из них 8 разных, остальные повторяются) и 12 плоскостей. Теперь по логике вещей, в информации о плоскости идут номера вершин, задействованных в ней… А я получаю значения (-842200000 – номер вершины) или что-то около того. Т.е. при 20 вершинах, я получила разброс в этих громадных цифрах именно в 20.
Попробовала провести логические линии между результатами… куб полностью не получается никак, как ни крути. (Например, есть 2 треугольника, у которых 2 вершины равны)
Отсюда и вопрос. Кто-то смотрел внутрь? И что это за цифры?
Если бы я не правильно читала файл, но не видела бы его на экране, а я вижу….
Но если я не правильно читаю, то почему выводится на экран правильно. Обьект с текстурой. Двигается, вращается без проблемм. Да и разброс цифр именно в 20 (на кубике). Не похоже на совпадение.
А в двух байтах никак нельзя записать число, большее 65536 (2^16).
Если ты получила -842200000 , то значит читаешь, как будто номер вершины занимает 4 байта.
Но если я не правильно читаю, то почему выводится на экран правильно. Обьект с текстурой. Двигается, вращается без проблемм. Да и разброс цифр именно в 20 (на кубике). Не похоже на совпадение.
В формате 3DS есть чанки. В частности, длина чанка пишется в его начале. Если ты правильно читаешь чанки с учетом их длины, то у тебя не должно быть рассинхронизации при неправильной длине денных.
Тем не менее, не совсем понятно, как ты отображаешь вершину номер -842200000, что у тебя все выглядит нормально.
Читала я правильно. Номера полигонов все таки, int.
Проблемма была в том, что обьект был не глобальный, соответствено не обнуленный. Я думала что при чтении из файла все компоненты получат ствои значения и все...
Оказалось что у Visual Studio 2005 какая то проблемма с этим. И он заносил мне мусор.
Обнулила обьект, перед чтением в него и все заработало.
Как это так номер вершины - int???
Вот, например, на этом же сайте описание 3ds формата:
http://www.codenet.ru/progr/formt/3ds.php
Блок:
CHUNK_FACELIST
Данные:
список граней текущего объекта
Формат:
word num; // число граней
struct { //
word v0; // номер первой вершины грани
word v1; // номер второй вершины грани
word v2; // номер третьей вершины грани
word flags; // флаги грани
} faces[num]; // собственно список граней
Тут все данные - word!
Оказалось что у Visual Studio 2005 какая то проблемма с этим. И он заносил мне мусор.
Это не проблема Visual Studio. Ни динамическая ни статическая память не очищяется если это не делать специально.
Номера вершин в 3ds действительно 2 байта. Скорей всего при чтении из файла в переменную int записывалось 2 баита а в других 2 баитах остовался мусор поэтому числа были такими большими.