Added Camera::isRenderToTextureCamera() method, and improved support in PickVisitor

and IntersectVisitor for CameraNode, including the ignoring of render to texture cameras,
such that HUD's etc are still intersected against.
This commit is contained in:
Robert Osfield
2005-12-07 11:36:56 +00:00
parent 99be2cdb7f
commit 3f3c7b1df8
5 changed files with 25 additions and 14 deletions

View File

@@ -113,20 +113,17 @@ bool IntersectVisitor::IntersectState::isCulled(const BoundingSphere& bs,LineSeg
LineSegmentMask mask = 0x00000001;
segMaskOut = 0x00000000;
LineSegmentMask segMaskIn = _segmentMaskStack.back();
// notify(INFO) << << "IntersectState::isCulled() mask in "<<segMaskIn<<" ";
for(IntersectState::LineSegmentList::iterator sitr=_segList.begin();
sitr!=_segList.end();
++sitr)
{
if ((segMaskIn & mask) && (sitr->second)->intersect(bs))
{
// notify(INFO) << << "Hit ";
segMaskOut = segMaskOut| mask;
hit = true;
}
mask = mask << 1;
}
// notify(INFO) << << "mask = "<<segMaskOut<< std::endl;
return !hit;
}
@@ -303,7 +300,7 @@ void IntersectVisitor::popMatrix()
bool IntersectVisitor::enterNode(Node& node)
{
const BoundingSphere& bs = node.getBound();
if (bs.valid())
if (bs.valid() && node.isCullingActive())
{
IntersectState* cis = _intersectStateStack.back().get();
IntersectState::LineSegmentMask sm=0xffffffff;
@@ -313,7 +310,13 @@ bool IntersectVisitor::enterNode(Node& node)
}
else
{
return false;
IntersectState* cis = _intersectStateStack.back().get();
if (!cis->_segmentMaskStack.empty())
cis->_segmentMaskStack.push_back(cis->_segmentMaskStack.back());
else
cis->_segmentMaskStack.push_back(0xffffffff);
return true;
}
}
@@ -721,9 +724,12 @@ void PickVisitor::apply(osg::Projection& projection)
void PickVisitor::apply(osg::CameraNode& camera)
{
runNestedPickVisitor( camera,
camera.getViewport() ? camera.getViewport() : _lastViewport.get(),
camera.getProjectionMatrix(),
camera.getViewMatrix(),
_mx, _my );
if (!camera.isRenderToTextureCamera())
{
runNestedPickVisitor( camera,
camera.getViewport() ? camera.getViewport() : _lastViewport.get(),
camera.getProjectionMatrix(),
camera.getViewMatrix(),
_mx, _my );
}
}