forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Ogre3D (http://forum.boolean.name/forumdisplay.php?f=156)
-   -   Overlay+scenenode проблема с перемещением камеры (http://forum.boolean.name/showthread.php?t=17016)

Hamaus 09.07.2012 20:50

Overlay+scenenode проблема с перемещением камеры
 
Всем привет!
В моем проекте необходимо реализовать приборную панель(mesh).
Я попробовал 2 варианта решения:
1) mesh и camera прикреплены к общему SceneNode. Для перемещений двигаем SceneNode.
2) прикрепил mesh к overlay с помощью add3d:
Код:

 
pOverlayManager = Ogre::OverlayManager::getSingletonPtr();
    pOverlay = pOverlayManager->create("myOverlay");

    Ogre::Entity *ent = pSceneMgr->createEntity("panel", "panel-light.mesh");
    Ogre::SceneNode *node = pSceneMgr->createSceneNode("panelNode");

    node->attachObject(ent);
    node->setPosition(0, 0, -3.5);

    pOverlay->add3D(node);
    pOverlay->show();

В обоих случаях проявляется баг: mesh дергается при движении камеры. Причем дерганье усиливается по мере отдаления от координат (0,0,0) (в нулях все норм). Движение отдельно mesh'а происходит плавно.
Как это можно исправить?
Спасибо за ответы )

pozitiffcat 10.07.2012 09:12

Ответ: Overlay+scenenode проблема с перемещением камеры
 
зачем к оверлею прикручивать? можно просто камеру и панель к одному ноду прикрутить и двигать вместо камеры этот узел, и будет все гуд.

Hamaus 10.07.2012 19:55

Ответ: Overlay+scenenode проблема с перемещением камеры
 
Цитата:

Сообщение от pozitiffcat (Сообщение 232561)
зачем к оверлею прикручивать? можно просто камеру и панель к одному ноду прикрутить и двигать вместо камеры этот узел, и будет все гуд.

Как раз это я описал в 1 варианте.
Цитата:

Сообщение от Hamaus (Сообщение 232534)
1) mesh и camera прикреплены к общему SceneNode. Для перемещений двигаем SceneNode.

Бага аналогична. На больших расстояниях от нуля панель трясется.

pozitiffcat 11.07.2012 10:00

Ответ: Overlay+scenenode проблема с перемещением камеры
 
Напиши как делал первый вариант

Hamaus 11.07.2012 22:55

Ответ: Overlay+scenenode проблема с перемещением камеры
 
Вместе с impersonalis выяснили, что корень жука зарыт в недостаточной точности float.
Вектора задаются типом Ogre::Real. В моей версии OgreSDK 1.7 он определен(OgrePrerequisites.h) как float (точность всего 7 знаков). Real можно переопределить как double(15-16 знаков). Для этого необходимо прописать деф в проекте и при ручной сборке огра (OgreBuildSettings.h):
Код:

#define OGRE_DOUBLE_PRECISION 1
После этого Real - это double.

pozitiffcat 11.07.2012 23:00

Ответ: Overlay+scenenode проблема с перемещением камеры
 
Ого где собака зарыта.
+1

impersonalis 17.07.2012 23:15

Ответ: Overlay+scenenode проблема с перемещением камеры
 
Цитата:

Сообщение от Hamaus (Сообщение 232736)
Вместе с impersonalis выяснили, что корень жука зарыт в недостаточной точности float.

Ну это скорее фишка стандарта (плавающая запятая) - хранить не фиксированный объём данных под целую и дробные части, а помнить мантиссу, распределяя объём соответственно. В окрестности нуля (в виду малой по модулю целой части) дробная часть может быть представлена с большой точностью, чем дальше - тем больше сжирает целая часть, оставляя дробную голодать.
Точно такой же эффект непринуждённо получается и на Blitz3D (где только float*) и на Xors3D** (где пользователь не имеет подобного Огру уровня доступа к движку, а в штатной сборке - тот же float).

Алгоритмически верное общее решение - реализовывать секторную подгрузку уровня. Это позволит оставлять камеру и окружение недалеко от нуля, храня их виртуальные координаты в числах двойной точности или как либо ещё.

*здесь и далее - речь о одинарной точности
** можете даже не баловаться с entity order и parent-ми: достаточно елозить камерой далеко от нуля и устанавливать чуть перед ней entity

pozitiffcat 18.07.2012 09:15

Ответ: Overlay+scenenode проблема с перемещением камеры
 
Я обычно делаю 1 единица равна одному метру игрового поля, тогда все ок. А то бывает тени глючить начинают или еще чего.


Часовой пояс GMT +4, время: 17:30.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot