//---------------------------------------------------------------------------- void Node::GetVisibleSetRenderObject(Culler& rCuller, Bool noCull) { const Camera* pCamera = rCuller.GetCamera(); // Add this RenderObject if it's not culled. (Its bounding volume is // smaller or equal the bounding volume of this node). if (mspRenderObject && ((pCamera->GetLayerMask() & mLayerMask) != 0)) { if (GetQuantity() == 0) { const Vector3F& rCamPos = rCuller.GetCamera()->GetLocation(); Vector3F pos = mspRenderObjectWorldBound->GetCenter() - rCamPos; rCuller.Insert(mspRenderObject, &World, pos); } else { UInt savePlaneState = rCuller.GetPlaneState(); if (noCull || rCuller.IsVisible(mspRenderObjectWorldBound, true)) { const Vector3F& rCamPos = rCuller.GetCamera()->GetLocation(); Vector3F pos = mspRenderObjectWorldBound->GetCenter() - rCamPos; rCuller.Insert(mspRenderObject, &World, pos); } rCuller.SetPlaneState(savePlaneState); } } }
//---------------------------------------------------------------------------- void Node::GetVisibleSet(Culler& rCuller, Bool noCull) { for (UInt i = 0; i < mEffects.GetQuantity(); i++) { // This is a global effect. Place a 'begin' marker in the visible // set to indicate the effect is active. rCuller.Insert(mEffects[i], NULL); } GetVisibleSetRenderObject(rCuller, noCull); // All RenderObjects in the subtree are added to the visible set. If // a global effect is active, the RenderObjects in the subtree will be // drawn using it. for (UInt i = 0; i < mChildren.GetQuantity(); i++) { Spatial* pChild = mChildren[i]; if (pChild) { pChild->OnGetVisibleSet(rCuller, noCull); } } for (UInt i = 0; i < mEffects.GetQuantity(); i++) { // Place an 'end' marker in the visible set to indicate that the // global effect is inactive. rCuller.Insert(NULL, NULL); } }
//---------------------------------------------------------------------------- void TerrainPage::GetVisibleSet (Culler& culler, bool noCull) { TriMesh::GetVisibleSet(culler, noCull); for (int i=0; i<(int)mJunglers.size(); i++) { culler.Insert(mJunglers[i]); } }
//---------------------------------------------------------------------------- void Renderable::GetVisibleSet (Culler& culler, bool) { AdjustTransparent(); const Camera *camera = culler.GetCamera(); assertion(camera!=0, "camera must not be 0."); AVector cameraDir = camera->GetDVector(); AVector diff = WorldBound.GetCenter() - camera->GetPosition(); mEyeDistance = cameraDir.Dot(diff); culler.Insert(this); }
//---------------------------------------------------------------------------- void Visual::GetVisibleSet (Culler& culler, bool) { culler.Insert(this); }