//----------------------------------------------------------------------- //----------------------------------------------------------------------- //----------------------------------------------------------------------- BspNode* BspSceneManager::walkTree(Camera* camera, VisibleObjectsBoundsInfo *visibleBounds, bool onlyShadowCasters) { if (mLevel.isNull()) return 0; // Locate the leaf node where the camera is located BspNode* cameraNode = mLevel->findLeaf(camera->getDerivedPosition()); mMatFaceGroupMap.clear(); mFaceGroupSet.clear(); // Scan through all the other leaf nodes looking for visibles int i = mLevel->mNumNodes - mLevel->mLeafStart; BspNode* nd = mLevel->mRootNode + mLevel->mLeafStart; /* if (firstTime) { camera->getViewMatrix(); // Force update view before report of.open("BspSceneManager.log"); of << *camera << std::endl; of << "Camera Node: " << *cameraNode << std::endl; of << "Vertex Data: " << std::endl; for (int testi = 0; testi < mLevel->mNumVertices; ++testi) { of << " " << testi << ": pos(" << mLevel->mVertices[testi].position[0] << ", " << mLevel->mVertices[testi].position[1] << ", " << mLevel->mVertices[testi].position[2] << ")" << " uv(" << mLevel->mVertices[testi].texcoords[0] << ", " << mLevel->mVertices[testi].texcoords[1] << ")" << " lm(" << mLevel->mVertices[testi].lightmap[0] << ", " << mLevel->mVertices[testi].lightmap[1] << ")" << std::endl; } of << "Element data:" << std::endl; for (testi = 0; testi < mLevel->mNumElements; ++testi) { of << " " << testi << ": " << mLevel->mElements[testi] << std::endl; } } */ while (i--) { if (mLevel->isLeafVisible(cameraNode, nd)) { // Visible according to PVS, check bounding box against frustum FrustumPlane plane; if (camera->isVisible(nd->getBoundingBox(), &plane)) { //if (firstTime) //{ // of << "Visible Node: " << *nd << std::endl; //} processVisibleLeaf(nd, camera, visibleBounds, onlyShadowCasters); if (mShowNodeAABs) addBoundingBox(nd->getBoundingBox(), true); } } nd++; } // TEST //if (firstTime) //{ // of.close(); // firstTime = false; //} return cameraNode; }