2014-02-04 2 views
0

Я создал сцену, где обнаруживаю некоторые столкновения (пересечения), и я хочу показать прогресс этого столкновения (например, взаимодействие с объектами). Например, вы указываете на переключатель освещения, и есть круг, который заполняется в зависимости от времени, проведенного с помощью переключателя, поэтому свет включается/выключается после некоторого периода таймера.OSG - Создание наложения, всегда на панели отображения рендеринга?

что «начинка cricle/Строка состояния» сохраняется в изображениях 1.png, 2.png ...

//that "filling circle progress" is saved in images 
osg::ref_ptr<osg::Image> image1 = osgDB::readImageFile("1.png"); 
osg::ref_ptr<osg::Texture2D> texture1 = new osg::Texture2D; 
texture1->setImage(image1.get()); 

//create textured quad 
osg::ref_ptr<osg::Geometry> quad1 = osg::createTexturedQuadGeometry(osg::Vec3(-0.5f, 0.0f,-0.5f), 
                      osg::Vec3(1.0f,0.0f,0.0f), 
                      osg::Vec3(0.0f,0.0f,1.0f)); 

osg::StateSet* ss1 = quad1->getOrCreateStateSet(); 
ss1->setTextureAttributeAndModes(0, texture1.get()); 
ss1->setMode(GL_BLEND,osg::StateAttribute::ON); 
ss1->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); 

// I want that the "filling circle" will be always faced toward camera, so I use Billboards 
osg::ref_ptr<osg::Billboard> timer1 = new osg::Billboard; 
timer1->setMode(osg::Billboard::POINT_ROT_EYE); 
timer1->addDrawable(quad1.get()); 

// I switch between 4 different states - 1/4 of circle, 2/4, 3/4, 4/4.. 
// thats why I use Switch 
osg::Switch* switcher = new osg::Switch; 
switcher->addChild(timer1.get(),true); 

// just rootNode of scene 
rootNode->addChild(switcher); 

Таким образом, это прекрасно работает, но проблема в том, что иногда «статусной = заполнение круг «покрывается каким-то другим объектом (на основе буфера глубины, я думаю). Что я должен использовать, чтобы сделать свою строку статуса всегда поверх всего?

Я попытался сделать HUD-камеру, но это не помогло мне (это просто не отображалось), и я не знаю, правильно ли это, как это сделать.

Благодаря

+0

Являются ли «другие объекты», которые покрывают вашу панель состояния полностью непрозрачной или прозрачной/полупрозрачной? –

ответ

0

Обычно вы выключаете тестирования и глубины операции записи глубины и поставить HUD-подобный пункт в renderbin, что делает после того, как все другие вещи. Я думаю, что есть примеры того, как это сделать, возможно, в примерах osg HUD.

Смежные вопросы