const Vec3 GetDirection() const { if (mOverridingCamera){ return mOverridingCamera->GetDirection(); } return mTransformation.GetMatrix().Column(1); }
void EditThisParticle(const char* file){ if (mEditingParticle) mEditingParticle->StopImmediate(); bool numeric = IsNumeric(file); std::string fullpath; if (numeric) { fullpath = FindParticleNameWithID("data/particles", StringConverter::ParseInt(file)); } else { fullpath = file; fullpath += ".particle"; } ParticleEmitterPtr pnew = 0; if (strcmp(file, "0")) pnew = GetParticleEmitter(fullpath.c_str()); auto& renderer = Renderer::GetInstance(); if (pnew) { mEditingParticle = pnew; Logger::Log(FB_DEFAULT_LOG_ARG, FormatString("Editing : %s", fullpath.c_str()).c_str()); auto rt = renderer.GetMainRenderTarget(); assert(rt); if (!mOriginalCamera){ mOriginalCamera = rt->ReplaceCamera(mOverridingCamera); *mOverridingCamera = *mOriginalCamera; } mEditingParticle->SetPosition(mOverridingCamera->GetPosition() + mOverridingCamera->GetDirection() * 4.f); mEditingParticle->Active(true); mOverridingCamera->SetTarget(mEditingParticle); mOverridingCamera->SetEnalbeInput(true); } else if (strcmp(file, "0") == 0) { mEditingParticle->StopImmediate(); mEditingParticle = 0; auto rt = renderer.GetMainRenderTarget(); assert(rt); if (mOriginalCamera){ rt->ReplaceCamera(mOriginalCamera); mOriginalCamera = 0; } Logger::Log(FB_ERROR_LOG_ARG, "Exit particle editor"); } else { Logger::Log(FB_ERROR_LOG_ARG, FormatString("Cannot find the particle %s", fullpath.c_str()).c_str()); } }
//---------------------------------------------------------------------------- void ConvexRegionManager::Draw (Renderer& rkRenderer) { CameraPtr spCamera = rkRenderer.GetCamera(); Vector3f kEye = spCamera->GetLocation(); if ( m_bUseEyePlusNear ) kEye += spCamera->GetFrustumNear()*spCamera->GetDirection(); ConvexRegion* pkRegion = GetContainingRegion(kEye); if ( pkRegion ) { // inside the set of regions, start drawing with region of camera pkRegion->Draw(rkRenderer); } else { // outside the set of regions, draw the outside scene (if it exists) if ( GetOutside() ) GetOutside()->Draw(rkRenderer); } }