Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Disa от Январь 18, 2013, 15:49



Название: Qt + Ogre
Отправлено: 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


Название: Re: Qt + Ogre
Отправлено: Bepec от Январь 18, 2013, 16:49
Что это за код?
Код:
  if(e != NULL) {
    counter->close();
  }
  e->accept();
Что он должен делать?


Название: Re: Qt + Ogre
Отправлено: Disa от Январь 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();
 }
}
 

А вот тут что-то не работает :(

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


Название: Re: Qt + Ogre
Отправлено: Bepec от Январь 19, 2013, 09:59
Вы, грубо выражаясь, проверяете, пришло ли событие закрытия, или нет.

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

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

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

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

Хотя насчёт последнего могу ошибаться.


Название: Re: Qt + Ogre
Отправлено: Igors от Январь 19, 2013, 10:09
Что ж Вам не сидится, все ищете приключений  :) Ogre не юзал, из общих соображений - перед закрытием окна рендер должен быть завершен. Также если Ogre рендер - своя песня, то и вывод к него свой, и неясно как Вы хотели срастить его с QGLWidget. Первое что приходит в голову - направить рендер в буфер и рисовать получившийся QImage


Название: Re: Qt + Ogre
Отправлено: Disa от Январь 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 остается висеть.


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

А так все уходит в "прикручивание", и это не очень хорошо


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

Сроки выполнение - к весне должно быть что-то типа бета версии.  


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

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

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


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

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

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

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

Спасибо!


Название: Re: Qt + Ogre
Отправлено: Igors от Январь 21, 2013, 22:37
Ну в общем-то практический со всем в Ogre (из нужного) разобрался за пару дней. Пока только не могу понять как разбить модель на более мелкие элементы (а то там выделение по умолчанию через баундинбокс всей модели, а не отдельных элементов).
Ну вообще-то пакет не обязан предоставлять сервис типа "выделить поверхность" - это довольно приличные доп структуры данных. В большинстве случаев ответственность переносится на юзверя, который должен указать разные меши (в одном файле модели или неск)


Название: Re: Qt + Ogre
Отправлено: Disa от Январь 22, 2013, 11:47
Конечно не должен, я поэтому сразу смотрел в сторону OSG и OGRE когда думал что выбирать. Начальство хочет чтоб все было еще и "красиво". OGRE вроде как больше подходит под это, т.к. в OSG много оптимизации вшито.