Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: OpenSceneGraph и модели в Qt ресурсах [РЕШЕНО]  (Прочитано 3202 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн VestniK

  • Автор темы
  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Кто-нибудь работал со связкой Qt4 + OpenSceneGraph?

Я хотел бы вкомпилировать файлы моделей прямо в приложение как Qt ресурсы вместо того, чтобы загружать их с диска. Собственно мой текущий загрузчик моделей написанный на Qt и чистом OpenGL так и делает. Сейчас хочу перейти на OpenSceneGraph но osgDB::readNodeFile работает только с файлами на диске.

Существует ли какой-нибудь простой способ загрузить модель не из файла, а из буфера в оперативной памяти?
« Последнее редактирование: 05 Октября 2010, 17:15:16 от VestniK »

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах
« Ответ #1 : 02 Октября 2010, 19:25:46 »
Рад помочь....


вот код для загрузки JPEG в  OSG не через файл...


wxImageHandler * imgLoader = new wxJPEGHandler();
wxImage::AddHandler(imgLoader);
wxImage wximage;
wximage.LoadFile(_T("pictures/img.JPG"), wxBITMAP_TYPE_JPEG);

unsigned char* datachar = wximage.GetData();
std::stringstream ss;
size_t len = strlen((const char*)datachar);
ss.write((const char*)datachar, len);

osgDB::ReaderWriter* plugin = osgDB::Registry::instance()->getReaderWriterForExtension("JPEG");

/* tried both ss and ss.str() */
osgDB::ReaderWriter::ReadResult result = plugin->readImage(ss);
// osgDB::ReaderWriter::ReadResult result = plugin->readImage(ss.str());

/* Texture */
osg::Texture2D* KLN89FaceTexture = new osg::Texture2D;
KLN89FaceTexture->setDataVariance(osg::Object::DYNAMIC);

osg::Image* klnFace = result.getImage();



точно также и "файлы с данными" (osg, ive ....) загружаются....


Пользователь решил продолжить мысль 02 Октября 2010, 19:27:16:
Кто-нибудь работал со связкой Qt4 + OpenSceneGraph?

И уже очень давно.... )   Какой вопрос?

P.S. А вообще про OSG на этом форуме наверное бесполезно писать... лучше через "OpenSceneGraph Users" <osg-users@lists.openscenegraph.org>
« Последнее редактирование: 02 Октября 2010, 19:29:49 от maximum2000 »

Оффлайн VestniK

  • Автор темы
  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах
« Ответ #2 : 03 Октября 2010, 01:57:45 »
Спасибо, это именно то, что мне нужно. Я пока только в одном месте нашёл пример как в OSG с виртуальными файловыми системами работь, но там реализция была довольно сложная, проще было отказаться от хранения моделей в ресурсах.

Цитировать
Цитировать
Кто-нибудь работал со связкой Qt4 + OpenSceneGraph?

И уже очень давно.... )   Какой вопрос?
Ну я собственно после твоего совета и начал ковыряться с OpenSceneGraph :)

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах
« Ответ #3 : 03 Октября 2010, 12:10:17 »
Цитировать
Ну я собственно после твоего совета и начал ковыряться с OpenSceneGraph :)


 :)

Оффлайн VestniK

  • Автор темы
  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах [РЕШЕНО]
« Ответ #4 : 05 Октября 2010, 17:11:43 »
Завершил наконец-то миграцию своего проекта с самописного OpenGL рендерера на OpenSceneGraph. Итоговая функция загрузки моделей (из файла или из Qt ресурса) выглядит так:
osg::ref_ptr<osg::Node> TableWidget::loadModel(const QString &path)
{
    osg::ref_ptr<osg::Node> res = 0;
    QFile file(path);
    if (file.open(QIODevice::ReadOnly)) {
        QByteArray data = file.readAll();
        osgDB::ReaderWriter* plugin = osgDB::Registry::instance()->getReaderWriterForExtension("OSG");

        std::stringstream ss;
        ss.write(data.constData(), data.size());

        osgDB::ReaderWriter::ReadResult result = plugin->readNode(ss);
        res = result.getNode();
    }
    return res;
}
Позже немного поколдую на тему дружбы QIODevice и std::istream, чтобы не копировать понапрасну данные в оперативной памяти. На StackOverflow есть хорошие примеры как это сделать:
http://stackoverflow.com/questions/848269/mixing-qt-with-stl-and-boost-are-there-any-bridges-to-make-it-easy
http://stackoverflow.com/questions/1231461/inheriting-stdistream-or-equivalent

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах [РЕШЕНО]
« Ответ #5 : 05 Октября 2010, 21:37:08 »
Очень хорошо.
Ну и как OSG? Понравилась?

Пользователь решил продолжить мысль 05 Октября 2010, 21:39:49:
Позже немного поколдую на тему дружбы QIODevice и std::istream, чтобы не копировать понапрасну данные в оперативной памяти. На StackOverflow есть хорошие примеры как это сделать:
http://stackoverflow.com/questions/848269/mixing-qt-with-stl-and-boost-are-there-any-bridges-to-make-it-easy
http://stackoverflow.com/questions/1231461/inheriting-stdistream-or-equivalent

Я думаю, что результаты этих экспериментов можно разместить на сайте OSG.... (wiki)
В сообществе OSG достаточно большое внимание к QT....

« Последнее редактирование: 05 Октября 2010, 21:45:51 от maximum2000 »

Оффлайн VestniK

  • Автор темы
  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах [РЕШЕНО]
« Ответ #6 : 06 Октября 2010, 00:41:08 »
Цитировать
Ну и как OSG? Понравилась?
Доки конечно на обе ноги хромают. Куча разрозненных статей в траке и 10% документированного API :( Хотя время он, конечно, сэкономит, да и не нужно будет париться с кучей вещей.

Цитировать
Я думаю, что результаты этих экспериментов можно разместить на сайте OSG.... (wiki)
В сообществе OSG достаточно большое внимание к QT....
Посмотрю, может и засабмичу. Меня всё одолевает желание в их коде покопаться по поводу назначения непонятных функций и параметров, и может пару патчей с doxygen коментами отослать. Посмотрю как время и желание будет.
« Последнее редактирование: 06 Октября 2010, 01:23:55 от VestniK »

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах [РЕШЕНО]
« Ответ #7 : 06 Октября 2010, 10:31:48 »
Доки конечно на обе ноги хромают. Куча разрозненных статей в траке и 10% документированного API :( Хотя время он, конечно, сэкономит, да и не нужно будет париться с кучей вещей.

Ну есть книжка на английском, немецком и русском  :) кстати....
а все остальное в примерах.....

Оффлайн VestniK

  • Автор темы
  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах [РЕШЕНО]
« Ответ #8 : 06 Октября 2010, 11:30:02 »
Моё мнение на этот счёт: книжки и примеры нужны для базового понимания концепции библиотеки, а дальше нужна API документация в которой ты можешь быстро найти нужную функцию и прочитать подробности её использования. Я в примере нашёл идею как сделать то, что мне нужно, понял какие классы и методы мне нужны, полез в API доки, чтобы почитать подробности применения этих методов, а там пусто это не очень хорошо.

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: OpenSceneGraph и модели в Qt ресурсах [РЕШЕНО]
« Ответ #9 : 06 Октября 2010, 13:36:53 »
Моё мнение на этот счёт: книжки и примеры нужны для базового понимания концепции библиотеки, а дальше нужна API документация в которой ты можешь быстро найти нужную функцию и прочитать подробности её использования. Я в примере нашёл идею как сделать то, что мне нужно, понял какие классы и методы мне нужны, полез в API доки, чтобы почитать подробности применения этих методов, а там пусто это не очень хорошо.

Ну да, согласен.

 

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