bool LLLandmark::getGlobalPos(LLVector3d& pos) { if(mGlobalPositionKnown) { pos = mGlobalPos; } else if(mRegionID.notNull()) { F32 g_x = -1.0; F32 g_y = -1.0; if(mRegionID == mLocalRegion.first) { from_region_handle(mLocalRegion.second, &g_x, &g_y); } else { region_map_t::iterator it = mRegions.find(mRegionID); if(it != mRegions.end()) { from_region_handle((*it).second.mRegionHandle, &g_x, &g_y); } } if((g_x > 0.f) && (g_y > 0.f)) { pos.mdV[0] = g_x + mRegionPos.mV[0]; pos.mdV[1] = g_y + mRegionPos.mV[1]; pos.mdV[2] = mRegionPos.mV[2]; setGlobalPos(pos); } } return mGlobalPositionKnown; }
void NDynamicObject::updateFromVision(VisionSense vs) { setDistance(vs.distanceToSelf); setLocalPos(vs.localPos); if (WM.CanLocalize()) setGlobalPos(WM.getVisionPerceptorMatrix()*pos_local); }