<div dir="ltr"><div><div>Hi Ronny,<br><br></div>Without seeing the artificats first hand is not possible to know what is going on.  The best I can suggest is that you look at the near/far planes of the scene, could it be that the near/far planes are clipping the text?  <br><br>Also look at the possibility of state leaking into the text for some reason. Do you have custom OpenGL code?<br><br></div><div>Finally, which OSG version are you using?  The latest OSG version will likely have the most bug fixes so there is small chance that this might address issues.<br></div><div><br></div>Robert.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 17 April 2016 at 17:58, Ronny Hatteland <span dir="ltr"><<a href="mailto:ronnyhatteland@gmail.com" target="_blank">ronnyhatteland@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
By coincidence I made some progress to an issue that has been bugging me for two years, where the osgText disappears in a certain case. I am using VBO hardware instancing for another object, and when only the text and the VBO hardware instanced objects are visible (using a Switch node), the text disappears.<br>
<br>
Previously, I though it was related to the bounding box of the VBO instances, as the text would appear again if other objects were shown at the same time. However, today I noticed that when the text was not updated on cursor move, the original text that was set on the creation of the osgText::Text object would be visible as expected.<br>
<br>
The text is updated using txtObject->SetText(text) with the cursor position on a grid on the xz plane, with a text looking like this "(%d, %d)". Below is the code for the initialization of the text objects:<br>
<br>
<br>
Code:<br>
<br>
txtSelectedCell = new osgText::Text;<br>
txtSelectedCell->setDataVariance(Object::DYNAMIC);<br>
txtSelectedCell->setFont(consolasBold);<br>
txtSelectedCell->setFontResolution(128, 128);<br>
txtSelectedCell->setCharacterSizeMode(osgText::TextBase::OBJECT_COORDS);<br>
txtSelectedCell->setLineSpacing(0.10f);<br>
txtSelectedCell->setPosition(osg::Vec3(0.0, /*-0.001*/0.0, 0.0));<br>
txtSelectedCell->setCharacterSize(0.0015f);<br>
txtSelectedCell->setColor(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f));<br>
txtSelectedCell->setBackdropType(osgText::Text::OUTLINE);<br>
txtSelectedCell->setBackdropColor(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f));<br>
txtSelectedCell->setBackdropOffset(0.10f, 0.10f);<br>
txtSelectedCell->setAxisAlignment(osgText::Text::XZ_PLANE);<br>
txtSelectedCell->setAlignment(osgText::Text::CENTER_CENTER);<br>
txtSelectedCell->setText("(X,Y)");<br>
<br>
ref_ptr<Geode> infoCellText = new osg::Geode;<br>
infoCellText->setDataVariance(Object::DYNAMIC);<br>
infoCellText->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);<br>
infoCellText->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED);<br>
infoCellText->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE);<br>
infoCellText->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);<br>
text_program = LoadShaderProgram("textMaterial.vert", "textMaterial.frag");;<br>
infoCellText->getOrCreateStateSet()->setAttributeAndModes(text_program.get(), osg::StateAttribute::ON);<br>
osgUtil::GLObjectsVisitor glov(osgUtil::GLObjectsVisitor::TRAVERSE_ALL_CHILDREN | osgUtil::GLObjectsVisitor::SWITCH_OFF_DISPLAY_LISTS | osgUtil::GLObjectsVisitor::SWITCH_ON_VERTEX_BUFFER_OBJECTS);<br>
ref_ptr<osg::State> state = new osg::State(); glov.setState(state);<br>
infoCellText.get()->accept(glov);<br>
infoCellText->setCullingActive(false);<br>
infoCellText->addDrawable(txtSelectedCell.get());<br>
ref_ptr<MatrixTransform> mtSelectedCell->addChild(infoCellText); // Updated on mouse move<br>
<br>
<br>
<br>
<br>
Exploring this further, I created a new text object each time position on the grid was updated, that I added to the infoCellText geode. This would work only if I did not remove the original txtSelectedCell child. However, it would not work if txtSelectedCell->SetText was initialized to "" instead of "(X,Y)". If the txtSelectedCell text was changed with setText at the same time as a new osgText was added to the infoCellText geode, the text would not show.<br>
<br>
I suspect this has something to do with the bounding box of the text, however, I am not entirely sure if it is related to the osgText::Text object or the Geode with the text as a child. I tried to call computeBound() on txtSelectedCell as well as infoCellText after updating the text with setText(), but without any luck. In many cases when the text is not displayed I get weird artifacts with planes cutting through the view. Any suggestions would be extremely appreciated.<br>
<br>
Thank you!<br>
<br>
Cheers,<br>
Ronny<br>
<br>
------------------<br>
Read this topic online here:<br>
<a href="http://forum.openscenegraph.org/viewtopic.php?p=66845#66845" rel="noreferrer" target="_blank">http://forum.openscenegraph.org/viewtopic.php?p=66845#66845</a><br>
<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
</blockquote></div><br></div>