void SceneNode::_findVisibleObjects(Camera *pCamera, RenderQueue &renderQueue) { if(mp_attachedMoveableObject && mp_attachedMoveableObject->visible()) { if(pCamera->isVisible(getWorldBoundingBox(), NULL)) { mp_attachedMoveableObject->addToRenderQueue(pCamera->getProjViewMatrix() * _getFullTransform(), renderQueue); } } for(ChildNodeIterator it = m_childVec.begin(); it != m_childVec.end(); ++it) { SceneNode *pChild = static_cast<SceneNode*>(*it); pChild->_findVisibleObjects(pCamera, renderQueue); } }
//----------------------------------------------------------------------- void SceneNode::_findVisibleObjects(Camera* cam, RenderQueue* queue, VisibleObjectsBoundsInfo* visibleBounds, bool includeChildren, bool displayNodes, bool onlyShadowCasters) { // Check self visible if (!cam->isVisible(mWorldAABB)) return; // Add all entities ObjectMap::iterator iobj; ObjectMap::iterator iobjend = mObjectsByName.end(); for (iobj = mObjectsByName.begin(); iobj != iobjend; ++iobj) { MovableObject* mo = iobj->second; queue->processVisibleObject(mo, cam, onlyShadowCasters, visibleBounds); } if (includeChildren) { ChildNodeMap::iterator child, childend; childend = mChildren.end(); for (child = mChildren.begin(); child != childend; ++child) { SceneNode* sceneChild = static_cast<SceneNode*>(child->second); sceneChild->_findVisibleObjects(cam, queue, visibleBounds, includeChildren, displayNodes, onlyShadowCasters); } } if (displayNodes) { // Include self in the render queue queue->addRenderable(getDebugRenderable()); } // Check if the bounding box should be shown. // See if our flag is set or if the scene manager flag is set. if ( !mHideBoundingBox && (mShowBoundingBox || (mCreator && mCreator->getShowBoundingBoxes())) ) { _addBoundingBoxToQueue(queue); } }