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

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

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

Сообщений: 305



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

Доброго дня! Хочу загрузить модель в формате .3ds в Qt проект и добавить к ней интерактивности! Скажем, чтобы при нажатии на какую-нибудь деталь модели она (деталь) меняла цвет, или по каким-то событиям в программе, что-то происходило с отдельными деталями модели (прим. модель машины при нажатии на дверь, она открылась). Есть примеры работы с .3ds форматом через OpenGL, Qt3D+QML! C последним вроде как понятно, как там добавляется интерактивность.. но делать хочу на OpenGL, ибо с ней работал немного, а вот с Qt3D+QML не приходилось. Так вот не совсем понятно, можно ли программировать отдельные части модели средствами OpenGL и как?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Ну .3ds, как и др форматы - это всего лишь хранение данных на диске. Для доступа нужна структура в памяти, часто называется mesh. Она может быть и не равна тем данным которые подаются в OpenGL. Некоторое время назад резвый молодой человек говорил что нашел в импорт из 3ds в Qt3D - ну может есть смысл посмотреть классы Qt3D. Словом - определитесь с данными
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



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

Из примеров, которые я нашел и пытаюсь разобраться/переделать данные об объекте хранятся вот в таких структурах:
Код:

//Vertex
typedef struct{
    float x,y,z;
}vertex_type;
// The polygon (triangle), 3 numbers that aim 3 vertices
typedef struct{
    int a,b,c;
}polygon_type;
// The mapcoord type, 2 texture coordinates for each vertex
typedef struct{
    float u,v;
}mapcoord_type;

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;
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Из примеров, которые я нашел и пытаюсь разобраться/переделать данные об объекте хранятся вот в таких структурах:
Тут выплывает "проблема шаринга". Сколько вертексов содержит простейший кубик? Очевидный ответ 8. Но многие хранят 24. по 3 вертекса на точку. Позиции этих 3 одинаковы, а вот нормали (и/или UV и др атрибуты) разные. Так проще напр для OpenGL но хуже напр для редактирования (а какой вертекс из 3 выбрал юзверь?). Можно хранить все отдельно (8 позиций и 24 нориали), но ... пардон, увлекся  Улыбающийся (много этим занимался).

Возвращаясь к вопросу - можно самому прочитать чанки 3ds в ту структуру что Вы показали, там несложно. Но может более практично задействовать Qt3D и потом перегнать в свои данные. Или вообще работать с классами Qt3D.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



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

Тут выплывает "проблема шаринга". Сколько вертексов содержит простейший кубик? Очевидный ответ 8. Но многие хранят 24. по 3 вертекса на точку. Позиции этих 3 одинаковы, а вот нормали (и/или UV и др атрибуты) разные. Так проще напр для OpenGL но хуже напр для редактирования (а какой вертекс из 3 выбрал юзверь?). Можно хранить все отдельно (8 позиций и 24 нориали), но ... пардон, увлекся  Улыбающийся (много этим занимался).


О_о почти ничего не понял) курить и курить книги по 3D)


Возвращаясь к вопросу - можно самому прочитать чанки 3ds в ту структуру что Вы показали, там несложно. Но может более практично задействовать Qt3D и потом перегнать в свои данные. Или вообще работать с классами Qt3D.

Что касается Qt3D, то я пробовал, что-то делать, но там проблема (для меня) хотя бы подключить все эти библиотеки и скомпилировать! Перерыл весь интернет, вроде есть примеры, но чтобы корректо запустить надо сначало VS поставить, потом креатор, потом понапрописывать кучу каких-то путей к библиотекам.. в общем в итоге всех терзаний, я вроде как запустил! Только вот какие-то .3ds криво, косо, но отображает (скачанные из инета), а сделанные свои простые модели - нет! При всем этом у меня Qt 4.8.1, устанавливалось с QtSdk-offline-win-x86-v1_2_1 ! Там вроде как Qt3D я не нашел, пришлось скачивать с http://qt.digia.com/Try-Qt-Now/ а теперь оно платное вроде как?! По крайней мере у меня на 30 дней писалось разрешение на ипользование.. может где в другом месте подскажите где скачать и как без гемора установить (без VisualStudio), ибо под Linux-ом тоже нужно, чтобы собиралось!

Записан
spirits25
Гость
« Ответ #5 : Октябрь 17, 2012, 17:04 »

Не знаю, правильно ли я тут всё понял, но можно "нарисовать" всё на qt quick, а потом взаимодействовать с помощью С++. Вот этот пример точно рабочий с qt5 http://habrahabr.ru/post/133126/ .
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



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

Не знаю, правильно ли я тут всё понял, но можно "нарисовать" всё на qt quick, а потом взаимодействовать с помощью С++. Вот этот пример точно рабочий с qt5 http://habrahabr.ru/post/133126/ .

этот пример и делал.. так где мне можно взять халявный Qt3D?)
Записан
spirits25
Гость
« Ответ #7 : Октябрь 17, 2012, 17:18 »

Не понял, что значит халявный Qt3D?
Если Вы про Qt5, то я с git'а собирал http://qt-project.org/wiki/Building_Qt_5_from_Git
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



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

Не понял, что значит халявный Qt3D?
Если Вы про Qt5, то я с git'а собирал http://qt-project.org/wiki/Building_Qt_5_from_Git

а Qt3D только в 5 версии Qt?! ну чтобы собрать нужно ведь взять откудо-то исходники.. где их можно найти минуя
http://qt.digia.com/Try-Qt-Now/Qt-commercial-evaluation/?platform=windows-cpp ??! Раньше я с сайта нокии скачивал себе спокойно SDK, под win, linux и не парился, а как сейчас быть? Может есть готовое SDK, которое включает в себя Qt3D?
Сейчас у меня установленно QtSdk-offline-win-x86-v1_2_1 и там проекты с Qt3D не собираются..
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


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

Навряд ли сможете найти сдк под qt5 так как qt5 еще официально не вышел. То есть придется качать с гита и собирать руками. Хотя я больше склоняюсь к варианту написать свой парсер, там вроде не сильно сложно, но как бы потратить время придется.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



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

Навряд ли сможете найти сдк под qt5 так как qt5 еще официально не вышел. То есть придется качать с гита и собирать руками. Хотя я больше склоняюсь к варианту написать свой парсер, там вроде не сильно сложно, но как бы потратить время придется.

что-то мы отклонились от темы) парсер .3ds? так Qt3D есть только в Qt5 ??

"качать с гита" ссылку можно на скачивание?
« Последнее редактирование: Октябрь 17, 2012, 17:48 от Vladimir » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Vladimir, используйте цитирование когда отвечаете, а то непонятно где чьи слова.

Однако же как оживился разговор когда надо "чего-то достать" (собрать, взять, найти)  Улыбающийся

Скажем, чтобы при нажатии на какую-нибудь деталь модели она (деталь) меняла цвет, или по каким-то событиям в программе, что-то происходило с отдельными деталями модели (прим. модель машины при нажатии на дверь, она открылась).
Здесь Qt3D и др вряд ли помогут Улыбающийся Дверь должна быть отдельной моделью (или суб-моделью). Открытие двери сводится к домножению координат на матрицу поворота. Это преобразование линейное. Может быть лучше сначала четче поставить задачу, а иначе дело сведется к беганию-доставанию непонятно чего - и этим же закончится (увы, обычно бывает именно так)
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



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

Vladimir, используйте цитирование когда отвечаете, а то непонятно где чьи слова.

Однако же как оживился разговор когда надо "чего-то достать" (собрать, взять, найти)  Улыбающийся

Скажем, чтобы при нажатии на какую-нибудь деталь модели она (деталь) меняла цвет, или по каким-то событиям в программе, что-то происходило с отдельными деталями модели (прим. модель машины при нажатии на дверь, она открылась).
Здесь Qt3D и др вряд ли помогут Улыбающийся Дверь должна быть отдельной моделью (или суб-моделью). Открытие двери сводится к домножению координат на матрицу поворота. Это преобразование линейное. Может быть лучше сначала четче поставить задачу, а иначе дело сведется к беганию-доставанию непонятно чего - и этим же закончится (увы, обычно бывает именно так)

Согласен! Тем более загрузить при помощи OpenGL .3ds модель у меня уже получилось! Задача такого плана, скажем есть  система1, состоящая из 28 модулей:
1. при норм работе все горят зеленым, при аварии какого-либо, он изменяет цвет!
2. при наведеннии/нажатии на модуль появляется инфа по нему: давление, температура.. (где-то внизу в рамке тектом, либо еще как-то).

+ кроме системы1 есть еще ряд системN! Все это крепется на машине! Вращаешь, смотрешь, анализируешь!

Такую задачу можно реализовать на OpenGL??! и куда двигаться.. делать все изменяющиеся части в отдельных .3ds или можно все сделать в одной, но разбить на суб-модели как вы писали???!
« Последнее редактирование: Октябрь 17, 2012, 20:03 от Vladimir » Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


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

Отклонюсь еще немного от темы Улыбающийся Как сделали загрузку ? Я недавно баловался с 3ds посмотрел на инструменты которые есть и решил сделать свой загрузчик, может я упустил хорошую реализацию Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Отклонюсь еще немного от темы Улыбающийся Как сделали загрузку ? Я недавно баловался с 3ds посмотрел на инструменты которые есть и решил сделать свой загрузчик, может я упустил хорошую реализацию Улыбающийся
Еще больше отклонюсь Улыбающийся Смотря какие у Вас цели. Если сделать ASAP и забыть - то "надо изыскивать". А если хотите изучить - то и нечего жалеть. Разобрать чанки, пересчитать вертексные нормали и.т.п. - это то что нужно, те самые "азы". А то "прикручивающих" много, а понимающих нет
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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