Hi,
I think there might be a small bug in osg::OcclusionQueryNode, that I've yet to
find.
Here is a small example with a line triangle, that shows the problem.
I added no face geometry so the lines should basically always be visible when
in view.
Each line is under an OcclusionQueryNode, but under some camera poses using the
trackball manipulator, line 3 isn't visible, although it should be.
When I put all the lines in a osg::Group, they are visible.
Does anybody have an idea where the problem might be?
Code:
#include <osg/Group>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/TrackballManipulator>
#include <osg/OcclusionQueryNode>
#include <vector>
int main( int argc, char** argv )
{
int width = 640;
int height = 480;
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
camera->setClearColor(osg::Vec4(1.0, 1.0, 1.0, 0.0));
camera->setViewport( new osg::Viewport(0, 0, width, height) );
camera->setProjectionMatrixAsPerspective(30.0f,
static_cast<double>(width)/static_cast<double>(height), 1.0f, 10000.0f );
viewer.setCamera(camera);
osg::Group* rootnode = new osg::Group;
viewer.setSceneData(rootnode);
viewer.addEventHandler(new osgViewer::StatsHandler);
viewer.setUpViewInWindow(200, 200, width, height);
viewer.setCameraManipulator( new osgGA::TrackballManipulator );
std::vector<osg::Vec3> lines;
//Line 1
lines.push_back(osg::Vec3(-1,0,0));
lines.push_back(osg::Vec3(0,1,0));
//Line 2
lines.push_back(osg::Vec3(0,1,0));
lines.push_back(osg::Vec3(1,0,0));
//Line 3
lines.push_back(osg::Vec3(1,0,0));
lines.push_back( osg::Vec3(-1,0,0));
for(int i = 0; i < 3; i++){
//osg::ref_ptr<osg::Group> parent = new osg::Group;
osg::ref_ptr<osg::OcclusionQueryNode> parent = new
osg::OcclusionQueryNode;
parent->setVisibilityThreshold(1);
parent->setQueriesEnabled(true);
osg::Geometry* linesGeom = new osg::Geometry();
osg::Vec3Array* vertices = new osg::Vec3Array;
vertices->push_back(lines.at(i+i));
vertices->push_back(lines.at(i+i+1));
osg::Vec4Array* color = new osg::Vec4Array;
color->push_back(osg::Vec4(1,0,0,1));
linesGeom->setColorArray(color);
linesGeom->setColorBinding(osg::Geometry::BIND_OVERALL);
linesGeom->setVertexArray(vertices);
linesGeom->addPrimitiveSet(new
osg::DrawArrays(osg::PrimitiveSet::LINES,0,2));
osg::Geode* geode = new osg::Geode();
geode->addDrawable(linesGeom);
parent->addChild(geode);
rootnode->addChild(parent);
}
return viewer.run();
}
Cheers,
Dakota
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=51621#51621
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org