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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt + Ogre  (Прочитано 7111 раз)
Disa
Гость
« : Январь 18, 2013, 15:49 »

Прицепил Ogre к Qt. Тот экзампл что на офф. сайте не пашет, из-за того (как я понял), что qt всегда навязывает свой PaintEngine из-за чего Огр не юзает свой.

Ну с этим тоже разобрался. Теперь естессно проблемы, например, делать вот так нельзя в Widget'e с Ogre:
Код
C++ (Qt)
counter = new QLabel(this);
counter->show();
 
Рисуется черный прямоугольник.

И почему-то вот так не работает:
Код:
void OgreWidget::closeEvent(QCloseEvent *e) {
  if(e != NULL) {
    counter->close();
  }
  e->accept();
}

С сигналом-слотом тоже не выходит.

Вопрос - что я делаю не так:)
PS: Спасибо товарищу Igors, c FBX разобрался, но сроки жмут, поэтому перешел на Ogre
Записан
Bepec
Гость
« Ответ #1 : Январь 18, 2013, 16:49 »

Что это за код?
Код:
  if(e != NULL) {
    counter->close();
  }
  e->accept();
Что он должен делать?
Записан
Disa
Гость
« Ответ #2 : Январь 18, 2013, 23:59 »

Если в конструкторе делать лейбел, вот так вот, то он при закрытие окна сам не закрывается.
Код
counter = new QLabel();
counter->show();
 

Если делать так,
Код
counter = new QLabel(this);
counter->show();
 
То будет черный QLabel. Ровно так же как это происходит с QGLWidget. Ну если к QGLWidget базовые виджеты как-то можно прикрутить через Qgraphicsscene, то как это сделать (и нужно ли это вообще делать в Ogre) я не представляю.

Мне кажется, что нет ничего страшного сделать так, чтоб по евенту закрытия самого виджета, все созданные в его конструкторе так же закрывались.
Я пробовал делать через сигнал, посылаемый в closeEvent или как указал выше. В QGLWidget'е, вот так закрывать групбокс у меня получалось без проблем:

Код
C++ (Qt)
void GlWidget::closeEvent(QCloseEvent *ce) {
 if(ce != NULL) {
   groupBox->close();
 }
}
 

А вот тут что-то не работает Грустный

Ну если есть какие-то предложения и идеи или я где-то жестко не прав, буду рад выслушать.
Записан
Bepec
Гость
« Ответ #3 : Январь 19, 2013, 09:59 »

Вы, грубо выражаясь, проверяете, пришло ли событие закрытия, или нет.

Если вы сами не вызываете из кода этой функции,то ни при каких условиях евент закрытия не будет равен NULL.

Т.е. ваша проверка - эмм... бесполезна?

А во 2 - что вам мешает сделать
Код:
delete label; 
delete groupBox;

Объекты будут удалены. А при вызове close, насколько я помню, объект не уничтожается и получается утечка памяти с каждым новым виджетом.

Хотя насчёт последнего могу ошибаться.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Январь 19, 2013, 10:09 »

Что ж Вам не сидится, все ищете приключений  Улыбающийся Ogre не юзал, из общих соображений - перед закрытием окна рендер должен быть завершен. Также если Ogre рендер - своя песня, то и вывод к него свой, и неясно как Вы хотели срастить его с QGLWidget. Первое что приходит в голову - направить рендер в буфер и рисовать получившийся QImage
Записан
Disa
Гость
« Ответ #5 : Январь 19, 2013, 23:53 »

Спасибо за ответы  Улыбающийся

Цитировать
неясно как Вы хотели срастить его с QGLWidget
В старых версия огра вот так вот работало:
http://www.ogre3d.org/tikiwiki/QtOgre

Цитировать
Если вы сами не вызываете из кода этой функции,то ни при каких условиях евент закрытия не будет равен NULL.

Не очень понял, с OpenGL я наследовал класс от QGLWidget и все работало как я описал. Я не очень знаю насчет памяти, т.к. этот виджет у меня был единственный родитель остальных и при закрытие его приложение закрывалось. Но теперь я наследую виджет просто от QWidget, и так уже не работает. Возможно из-за того что я отрубил родной renderEndige и как писал Igors мб закрытие окна с другим рендером не гарантирует вызов closeEvent (если я все правильно понял)

Цитировать
Что ж Вам не сидится, все ищете приключений
1) Интересно же!
2) Направьте меня на путь истинный Улыбающийся Я в компании графикой занимаюсь вдвоем с еще одним товарищем.

Цитировать
А во 2 - что вам мешает сделать
Я чего-то себя совсем дураком чувствую. Добавил delete и в деструктор OgreWidget и в  
closeEvent, никакой реакции. Закрываю главное окно (т.е. OgreWidget), а label остается висеть.
« Последнее редактирование: Январь 20, 2013, 00:05 от Disa » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Январь 20, 2013, 10:42 »

1) Интересно же!
2) Направьте меня на путь истинный Улыбающийся Я в компании графикой занимаюсь вдвоем с еще одним товарищем.
В каком формате у Вас геометрия? Что Вы хотите с ней делать (как модифицировать)? Если нет collision detection, bones и др наворотов - то нет оснований запрягать какие-то движки, возможностей Qt должно хватать с избытком.

А так все уходит в "прикручивание", и это не очень хорошо
Записан
Disa
Гость
« Ответ #7 : Январь 20, 2013, 11:40 »

Задача - инструмент для обучения "слесарей" на электростанциях, по сборки-разборки сложного оборудования (типа парогенераторов, гидравлических задвижек и прочее).
По ТЗ - 3d сцена с оборудованием + ГУЙ с выбором инструментов и действий с ними. Совсем грубо говоря - есть бак у него есть шпильки и винты на 24, винты нужно открутить ключом на 24, шпильки вынуть руками и прочее-прочее. Т.е. супер анимации нет никакой, повороты + сдвиги. Так же еще требуется проигрывать родную анимацию (это чтоб можно было смотреть обучающие демки).
Я не очень знаю как делают по классике выбор объектов модели, в OpenGL я бы выбор объектов делал через unprojectmatrix, в OSG и Ogre знаю что делается через bounding box + ray cast из мыши. Сами объекты - модельки в одном из популярных форматов. Привязка объектов к инструментам и анимации должна быть через SQL БД.  

Сроки выполнение - к весне должно быть что-то типа бета версии.  
« Последнее редактирование: Январь 20, 2013, 12:20 от Disa » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Январь 20, 2013, 12:23 »

Задача - инструмент для обучения "слесарей" на электростанциях, по сборки-разборки сложного оборудования (типа парогенераторов, гидравлических задвижек и прочее).
По ТЗ - 3d сцена с оборудованием + ГУЙ с выбором инструментов и действий с ними. Совсем грубо говоря - есть бак у него есть шпильки и винты на 24, винты нужно открутить ключом на 24, шпильки вынуть руками и прочее-прочее. Я не очень знаю как делают по классике, в OpenGL я бы выбор объектов делал через unprojectmatrix, в OSG и Ogre знаю что делается через bounding box + ray cast из мыши. Сами объекты - модельки в одном из популярных форматов. Привязка объектов к инструментам должна быть через SQL БД.  

Сроки выполнение - к весне должно быть что-то типа бета версии.  
Ну изучение подробностей движка точно к весне не кончится  Улыбающийся Почему бы не пойти самым простым/естественным путем - просто использовать Qt классы (QGLWidget и др)? Вывести сцену, сделать простую навигацию. Выбор объекта - да на худой конец перебором полигонов (не смертельно), хотя в Qt средства/инструментарий я краем глаза видел. Насколько я понял, нужны анимации типа "открутить винт ключом", "вынуть шпильку" и.т.п. Ну как сказать.. возможно/вероятно в движке это делается запросто. Но хз сколько времени займет освоение того движка. Делать с нуля - да, неск больше работы, но, на мой взгляд, надежнее. Это всего лишь работа с матрицами   

Понимаю что в таких случаях "трудно решиться" (а вдруг есть инструментарий где это все на раз - а я тут навелосипедил). Но с др стороны лазание по чужим движкам высасывает время капитально, а результатов как не было так и нет. Есть смысл ставить вопрос так "а есть ли серьезная физика/математика?". Если нет (пока вижу так) то "просто Qt", без всяких движков = нормальное решение
Записан
Disa
Гость
« Ответ #9 : Январь 21, 2013, 21:48 »

Цитировать
Ну изучение подробностей движка точно к весне не кончится   Почему бы не пойти самым простым/естественным путем - просто использовать Qt классы (QGLWidget и др)? Вывести сцену, сделать простую навигацию. Выбор объекта - да на худой конец перебором полигонов (не смертельно), хотя в Qt средства/инструментарий я краем глаза видел. Насколько я понял, нужны анимации типа "открутить винт ключом", "вынуть шпильку" и.т.п. Ну как сказать.. возможно/вероятно в движке это делается запросто. Но хз сколько времени займет освоение того движка. Делать с нуля - да, неск больше работы, но, на мой взгляд, надежнее. Это всего лишь работа с матрицами   

Понимаю что в таких случаях "трудно решиться" (а вдруг есть инструментарий где это все на раз - а я тут навелосипедил). Но с др стороны лазание по чужим движкам высасывает время капитально, а результатов как не было так и нет. Есть смысл ставить вопрос так "а есть ли серьезная физика/математика?". Если нет (пока вижу так) то "просто Qt", без всяких движков = нормальное решение

Ну в общем-то практический со всем в Ogre (из нужного) разобрался за пару дней. Пока только не могу понять как разбить модель на более мелкие элементы (а то там выделение по умолчанию через баундинбокс всей модели, а не отдельных элементов).

С QGLWidget в общем-то сложностей тоже особых нет, из FBX модель с горем пополам научился загружать, теперь еще нужно это обернуть в класс и тоже делать выделение дочерних объектов. Короче по мне один фиг, я и то и то долго делать буду, чтоб работало нормально Улыбающийся

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

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Январь 21, 2013, 22:37 »

Ну в общем-то практический со всем в Ogre (из нужного) разобрался за пару дней. Пока только не могу понять как разбить модель на более мелкие элементы (а то там выделение по умолчанию через баундинбокс всей модели, а не отдельных элементов).
Ну вообще-то пакет не обязан предоставлять сервис типа "выделить поверхность" - это довольно приличные доп структуры данных. В большинстве случаев ответственность переносится на юзверя, который должен указать разные меши (в одном файле модели или неск)
Записан
Disa
Гость
« Ответ #11 : Январь 22, 2013, 11:47 »

Конечно не должен, я поэтому сразу смотрел в сторону OSG и OGRE когда думал что выбирать. Начальство хочет чтоб все было еще и "красиво". OGRE вроде как больше подходит под это, т.к. в OSG много оптимизации вшито.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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