Russian Qt Forum
Ноябрь 23, 2024, 15:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: работа с форматом .3ds на OpenGL  (Прочитано 19131 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #15 : Октябрь 17, 2012, 21:19 »

Разобрать чанки, пересчитать вертексные нормали и.т.п. - это то что нужно, те самые "азы".

Вот так и делал!) а по теме подскажите что? =)
« Последнее редактирование: Октябрь 17, 2012, 21:22 от Vladimir » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Октябрь 17, 2012, 22:00 »

Вот так и делал!) а по теме подскажите что? =)
Та запросто Улыбающийся Только обозначьте эту тему, а то сейчас мутно - то Вы ищете либу, то говорите что свой парсер уже написали. Ну если так - и работайте с вертексами, в чем проблема?
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #17 : Октябрь 17, 2012, 22:50 »

Вот так и делал!) а по теме подскажите что? =)
Та запросто Улыбающийся Только обозначьте эту тему, а то сейчас мутно - то Вы ищете либу, то говорите что свой парсер уже написали. Ну если так - и работайте с вертексами, в чем проблема?

))) ну с либой я уже закончил) спрошу на конкретном примере:
Нашел модельку какого-то блендера и загрузил к себе в проект, как мне сделать что-бы при нажатии на кнопку (2), объект 1 менял цвет, при повороте рукоятки 3, объект 1 начал вращаться! Это нужно делать 4 отдельных .3ds (1,2,3 + блок на котором это все крепится)! Если да, то как их потом собрать в один блендер?? Или это можно сделать все в одном файле, а потом как-то разобрать.. вертексами, как вы пишете!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Октябрь 18, 2012, 02:35 »

))) ну с либой я уже закончил) спрошу на конкретном примере:
Нашел модельку какого-то блендера и загрузил к себе в проект, как мне сделать что-бы при нажатии на кнопку (2), объект 1 менял цвет, при повороте рукоятки 3, объект 1 начал вращаться! Это нужно делать 4 отдельных .3ds (1,2,3 + блок на котором это все крепится)! Если да, то как их потом собрать в один блендер?? Или это можно сделать все в одном файле, а потом как-то разобрать.. вертексами, как вы пишете!
Один 3ds файл может содержать любое кол-во объектов. Какие из них показывать - решаете Вы. Раскраску можно делать по-всякому, самое простое - вызвать glColor. Поворот: каждый объект имеет матрицу (поле данных) которая описывает его поворот, смещение, масштаб. Создаете нужную матрицу для вращения и подсовываете ее (glLoadMatrix). Ну вот собственно и все.

Примечание: не стоит считать что 3D == OpenGL. Это просто инструмент вывода без которого трудно обойтись
Записан
Disa
Гость
« Ответ #19 : Октябрь 18, 2012, 06:55 »

Цитировать
самое простое - вызвать glColor
Ну вроде как уже все давно ушли от ffp? С шейдерами чуть потруднее, но и kronos и nvidia уже года 3и рекомендует делать именно через них все.

Цитировать
Это нужно делать 4 отдельных .3ds (1,2,3 + блок на котором это все крепится)!
Наверное стоит разобраться с форматом http://www.gamedev.net/topic/313126-3ds-parsing-tutorial/

Готовый парсер: http://code.google.com/p/lib3ds/

Я сейчас с ходу не вспомню, но помоему в 3ds в дереве храняться отдельно только меши/камера/свет без привязки друк к другу. То есть нельзя понять, какие части объекта - целая деталь. Хотя тут я могу ошибаться, давно я парсил его.

Мб лучше посмотреть в сторону COLLADA или FBX?
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #20 : Октябрь 18, 2012, 09:57 »

Один 3ds файл может содержать любое кол-во объектов. Какие из них показывать - решаете Вы.
Нужно показывать все, просто иметь возможность доступиться к каждому из них в отдельности.
Ну вот создал я два простых параллелепипеда в программе Google SketchUp 7. Сохранил в .dae, затем MeshLab конвертнул в .3ds! Запустил в своей программе. И после парсинга он видит эти 2 объекта как один. Как мне разгребсти где какой? Напомню структура для хранения данных об объекте такая:
Код:
typedef struct
        {
            char name[20]; // Name of the object

            int vertices_qty; // Number of vertices
            int polygons_qty; // Number of polygons
            int size;// aprox size of the model

            vertex_type vertex[MAX_VERTICES]; // Array of vertices
            vertex_type normal[MAX_VERTICES]; // Array of the vertices' normals

            polygon_type polygon[MAX_POLYGONS]; // Array of polygons (numbers that point to the vertices' list)
            mapcoord_type mapcoord[MAX_VERTICES]; // Array of U,V coordinates for texture mapping

            int id_texture; // Number of the texture

        } obj_type, *obj_type_ptr;

Может в самом графическом редакторе нужно, как-то разделить их.. сделать отдельными компонентами или еще как-то! Или при сохранении в .3ds он сохраняет все полигоны, вертексы, не разграничивая какому объекту сколько полигонов принадлежит..?
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #21 : Октябрь 18, 2012, 10:17 »

Мб лучше посмотреть в сторону COLLADA или FBX?

А COLLADA - это формат .dae в виде XML? Может его действительно проще парсировать и выделить нужные объекты, чтобы работать с ними по отдельности (поменять цвет, покрутить и т.д.)?
Записан
spirits25
Гость
« Ответ #22 : Октябрь 18, 2012, 10:31 »

Сохраните каждый объект в отдельную модель .3ds, и каждую создавайте отдельно. тогда и будет к каждой отдельный доступ.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #23 : Октябрь 18, 2012, 10:48 »

Сохраните каждый объект в отдельную модель .3ds, и каждую создавайте отдельно. тогда и будет к каждой отдельный доступ.

Хорошо, а как тогда совместить на сцене эти отдельные 3ds в одну целую модель! А если этих частей будет много, а их будет много, то как их потом собирать в одну модель?! Зачем тогда вообще 3d редакторы, если все придется собирать из отдельных частей руками.. ( хотелось бы сделать всю модель сразу, а потом иметь доступ к отдельным ее частям!
Записан
Disa
Гость
« Ответ #24 : Октябрь 18, 2012, 11:44 »

http://www.gamedev.ru/code/terms/COLLADA
https://collada.org/mediawiki/index.php/COLLADA_DOM

читаем-изучаем.
COLLADA вообще создавался для переноса. Я его не парсил сам, но точно знаю что тот же OSG умеет его загружать и можно обращаться к любым узлам модели (ну и соответсвенно загружать их).

У FBX есть готовое SDK на С++ в котором вообще все есть для обращения к сцене. Там даже есть камера и прочее (я правда читал спецификацию, сам пока никак не дойду чтоб пощупать руками). И к узлам модели то же можно обращаться.

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #25 : Октябрь 18, 2012, 12:56 »

COLLADA / FBX - это вещь "другого порядка", тащить ее для задач о которых рассказал Владимир - ну, мягко говоря, "неэффективно"

Напомню структура для хранения данных об объекте такая:
Код:
            vertex_type vertex[MAX_VERTICES]; // Array of vertices
            vertex_type normal[MAX_VERTICES]; // Array of the vertices' normals

            polygon_type polygon[MAX_POLYGONS]; // Array of polygons (numbers that point to the vertices' list)
            mapcoord_type mapcoord[MAX_VERTICES]; // Array of U,V coordinates for texture mapping
Против просто С (без плюсов) нет возражений, но вот резервировать массивы по максимуму - второй месяц занимаетесь программированием, что ли? Это неприлично.

Нужно показывать все, просто иметь возможность доступиться к каждому из них в отдельности.
Ну вот создал я два простых параллелепипеда в программе Google SketchUp 7. Сохранил в .dae, затем MeshLab конвертнул в .3ds! Запустил в своей программе. И после парсинга он видит эти 2 объекта как один. Как мне разгребсти где какой?
Должны быть 2 чанка mesh в файле 3ds. Если их там нет (импортер слил), то поезд ушел, ищите тот что не сливает - проще всего сама 3ds, Вас устроит любая версия за последние 10 лет.
Во-вторых, в самом чанке меша есть суб-чанк матрицы объекта, прочитав его Вы знаете где объект расположен, как повернут. Если не ошибаюсь суб-чанк 4160, проще открыть спецификацию. 
Записан
Disa
Гость
« Ответ #26 : Октябрь 23, 2012, 05:46 »

To Igors:
А что насчет ms3d?
Вы же сами писали, что контейнер формата это не имеет ничего общего с его отображением, поэтому мб стоит исходить не только из того, чтоб он имел минимально необходимую информацию, но и чтоб написание парсинга не занимала кучу времени?
 
Для автора:
1). Готовый лоадер (с отображением опять же через ffp):
http://nehe.gamedev.net/tutorial/model_loading/16004/

2). Спецификация формата:
http://chumbalum.swissquake.ch/ms3d/ms3dspec.txt
« Последнее редактирование: Октябрь 23, 2012, 05:48 от Disa » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Октябрь 23, 2012, 10:19 »

To Igors:
А что насчет ms3d?
Вы же сами писали, что контейнер формата это не имеет ничего общего с его отображением, поэтому мб стоит исходить не только из того, чтоб он имел минимально необходимую информацию, но и чтоб написание парсинга не занимала кучу времени?
Если говорить о собственно чтении 3ds - час, ну два, какая там "куча"? Время обсуждения давно превысило время написания  Улыбающийся Вы предлагаете использовать Милку (ms3d) вместо 3ds - также вполне разумно, но совсем необязательно, если планируются такие простые операции, то самопальные структуры ничем не хуже. Как всегда, все зависит от задачи. Напр ограничения Милки до 64к вертексов или только 2 UV координаты могут оказаться существенными для "не игрового" проекта.
Записан
Disa
Гость
« Ответ #28 : Октябрь 23, 2012, 13:14 »

Ну я видимо не компетентен, но лично у меня на такой бы лоудер ушло больше бы времени:
http://savardge.narod.ru/bin/article_bin1.html
Помню, что когда первый раз парсил его (курсе на 5ом) то занимало много времени, но мб просто я туповат Веселый
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Октябрь 23, 2012, 13:45 »

Помню, что когда первый раз парсил его (курсе на 5ом) то занимало много времени, но мб просто я туповат Веселый
На мой взгляд у Вас заметна переоценка предыдущего опыта/впечатления. Запомнили что фрактал = Мандельброт - и точка! Улыбающийся Так же и здесь. "Когда-то это было сложно" - отпечаток остался в памяти, и все, погнали по либам. А если Вы подойдете непредвзято и с высоты Вашего сегодняшнего опыта - то я полагаю результат будет совсем иным.   
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 22.