Войти
ПрограммированиеФорумОбщее

Формат 3DS: Первый шаг. (Комментарии к статье)

Страницы: 1 2 3 4 5 Следующая »
#0
17:59, 16 янв. 2004

Комментарий к Статье Формат 3DS: Первый шаг.


#1
17:59, 16 янв. 2004

Где достать ifstream.h из примера Формат 3DS: Первый шаг.?

#2
19:03, 16 янв. 2004

включать надо fstream.h (C-compatible) или просто fstream типа так:

#include <fstream.h>
ifstream ifs;

// или

#include <fstream>
std::ifstream ifs;

#3
14:02, 25 апр. 2004

не понимаю
как объявить  в модуле переменную string

#4
22:04, 25 апр. 2004

тяжелый случай...
может

#include <string>
using std::string
спасет отца русской демократии?..

Если нет, то может стоит задавать вопросы более точно?

#5
15:18, 26 апр. 2004

а кому вообще нужен этот формат и зачем? по-моему намного проще и удобнее придумать свой формат и экспортер для него, чем разбираться с 3ds

#6
16:23, 26 апр. 2004

CyberZX
3ds поддерживается любой уважающий себя редактор моделей. Формат прост как пять копеек, есть стандартные либы для чтения/записи. Для начала - самое то.

#7
1:24, 25 мая 2004

У меня при попытке считать файл , содержащий объект , отличный от примитива (сфера,геосфера - созданного мной же в 3ds 5 ) получаеться затык на строчке :
chunk_pos=FindChunk(ifs,TRI_MAPPINGCOORS);
т.е chunk_pos == 0 , чего это означает - что у объекта нет текстурных координат ?

#8
11:07, 25 мая 2004

slSolo
Пользуйся готовыми библами и не будет затыков.
Посмотри, допустим, на 3dsftk.

#9
17:27, 3 сен. 2004

статья хорошая максимум уважения его автору за неё...

единственное замечание возникает по поводу организации главной функции... для дальнейшего улучшения можно было организовать чтение чанков как while( не конец файла и файл открыт) а внутри него боооольшооой switch с именами чанков...(имхо это удобнее для дальнейшего расширения загрузчика).

у меня возник один вопрос....как лучше организовать чтение файла в плане наличия в нём множества объектов (одна модель может содержать много отдельных объектов)...как лучше сделать для дальнейшего развития загрузчика: одну большую модель с одним вертекс и индекс буффером или много маленьких каждая со своим? или какую нить комбинацию этих реализаций?

ЗЫ был бы очень признателен если автор напишет про реализацию анимации (самые основы хотя бы).

#10
23:02, 28 окт. 2004

Может я чего-то не понимаю, но формат .3DS, описанный в статье очень сильно отличается от того, что в реале экспортит мой MAX (4-я версия).Совпадает только то, что в .3DS файле  первые 2 байта = 4D4D и после 4 байта=размер файла, а после
все идёт навыворот, так идентификатор 3D3D присутствует, но он стоит как 16-17 байт.
Я экспортировал обычный куб и не нашел в файле идентификатора TRI_VERTEXLIST (0x4110), а также других.

#11
12:43, 29 окт. 2004

Andree

Все Макс нормально экспортит. Такие бока возникают, когда прочитываешь блоки или скипишь их. Нужно учесть, что поле размера данных блока содержит размер блока с его заголовком. Поэтому, если этого не учесть и после заголовка считывать еще лишние 6 байт, то все наперекосяк и пойдет. Считывай данные блока размером chunk.size - 6.

#12
18:33, 26 мар. 2005

Andree

Все очень легко объяснить. В статье, почемуто был пропущен один блок!!! А именно блок версии файла, который следует сразу за главным. Занимает он ровно 10 байт и поэтому 3d3d находится аж 17-18 байтом.
Прошу автора статьи учесть эти замечения.

Ах да!!! Совсем забыл сказать. ID этого блока 0x0002.

#13
21:24, 1 июля 2005

Слабоватая статья для данного портала. Также при внимательном прочтении и разборе замечено ряд багов. Наверно, самый главный это то, что данный код не будет работать (ничего грузить). Объяснение этому простое: тело T3DMesh::FindChunk написано так, что все родительские блоки будут не найдены, т.к. будут всего навсего пропущены.

Теперь о правильной обработке 3ds файлов. Необходимо вызвать рекурсивную функцию разбора, которая была применена к текущему блоку. Если немного непонятна идея, то можно поглядеть здесь http://www.enlight.ru/faq3d/examples/load3ds.c это опять же не самое качественное решение задачи, но вполне приемлемый вариант. Достаточно разобраться с форматом и вы увидите как можно его оптимизировать, что я и сделал для себя. А вообще, вот здесь лежит более удачное описание блоков: http://www.enlight.ru/faq3d/articles/75.htm

Больше всего же меня в статье поразило самомнение ее автора...Ну на троечку я думаю это дело тянет.

Спасибо за внимание. Если у кого-то есть интересная информация по формату 3ds, то добро пожаловать ко мне в аську.

#14
16:13, 21 ноя. 2005

Кто хорошо разбирается с форматом, помогите пожалуйста!

Правильно ли я понял, что вложенный в 0x3D3D блок 0x4000 ровно один, а в него вложено 1 или более блоков TRIMESH, каждый из которых - какая-то отдельная часть составного объекта?

CHUNK_FACEMAT(4130) вложен в CHUNK_FACELIST(4120) или в CHUNK_TRIMESH(4100)?

Несколько вопросов, касающихся работы с материалами граней.

В блоке 0x3D3D есть блок AFFF (материал), в который вложены A000 (название материала), А200 (текстура материала) и А300 (имя файла текстуры). Как вложены и вложены ли друг в друга А000, А200, А300, и как организовано перечисление материалов: НЕСКОЛЬКО AFFF, в которых по одному А000, А200, А300 или ОДИН AFFF, в котором по нескольку A000, A200, A300?

И такой вопрос: в AFFF и в его "детей" могут быть вложены еще и другие блоки?
Правильно ли я понял, что в общем случае может быть, скажем, N блоков TRIMESH, в каждом из которых для его нескольких граней используется M материалов FACEMAT, которые могут повотряться. И таким образом, число материалов, перечисленных в AFFF - от 0 до M*N?

Спасибо!

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.