//--------------------------------------------------------------------------- void Scene::Render(IRenderEngine* pRenderEngine) { // render scene Camera* pCamera = GetActiveCamera(); if (pCamera) { // update camera! } }
void ZenFWRenderer::Run() { PROFILER_START(ZenFWRenderer::Run()); // VRAM upload VRAMService->ProcessDatas(); //mDefaultSkyColor if (mRenderProfile == RENDER_PROFILE_NETBOOK) GDD->Clear( CLEAR_COLOR|CLEAR_Z|CLEAR_STENCIL, gAtmosphere->GetDefaultSkyColor()->ConvToRGBA()); else GDD->Clear( /*CLEAR_COLOR|*/CLEAR_Z|CLEAR_STENCIL); ZCamera *pCam = GetActiveCamera(); GDD->SetProjectionMatrix(pCam->GetProjectionMatrix()); GDD->SetViewMatrix(pCam->GetTransform()->GetWorldMatrix()); if (GDD->BeginScene()) { GDD->GetQueueToRasterize()->Rasterize(mRenderProfile); static bool bPreviousMouseButDown = false; int X, Y; GetInputDevice()->MouseXY(&X, &Y); bool bCurrentMouseButDown = GetInputDevice()->MouseButDown(1); InjectMouseMove(X, Y); if ( bCurrentMouseButDown && (!bPreviousMouseButDown)) InjectMouseButtons(0, true); if ( (! bCurrentMouseButDown) && bPreviousMouseButDown) InjectMouseButtons(0, false); bPreviousMouseButDown = bCurrentMouseButDown; if (mProtoGui) mProtoGui->Tick(); TickCEGui(gTimer.GetEllapsed()); } if (mSoundRenderer) mSoundRenderer->Tick(); PROFILER_END(); }
void CollidePlayerDino(GameObject* go1, GameObject* go2) { Player* player = dynamic_cast<Player*>(go1); Assert(player); Dino* dino = dynamic_cast<Dino*>(go2); Assert(dino); if (dino->IsDead()) { return; // this actually happened! } // Get the pets to flee the dino PetList pets = player->GetPets(); player->DropPets(); for (PetList::iterator it = pets.begin(); it != pets.end(); ++it) { Pet* pet = *it; AI* ai = pet->GetAI(AIFlee::NAME); ai->SetTarget(dino); pet->SetAI(ai); pet->SetIsFalling(true); } Vec3f vel = player->GetVel(); player->SetVel(-vel); vel = dino->GetVel(); dino->SetVel(Vec3f(0, 0, 0)); dino->SetAI(AIStunned::NAME); PlayWav("hammer_anvil3"); // NB No file ext WWCamera* cam = GetActiveCamera(); Assert(cam); cam->SetEarthquake(1.0f); // TODO CONFIG }
void ECSTestScene::Initialise() { if (GetInitialised()) return; SetInitialised(true); m_renderSystem.SetCamera(&GetActiveCamera()); // resources // ///////////////////////////// // meshes unsigned int ID_MoonMesh = m_renderSystem.AddMesh("Models/planets/moon/moon.obj"); unsigned int ID_spaceship = m_renderSystem.AddMesh("Models/starwars/ARC170.3DS"); unsigned int ID_checkerPlaneMesh = m_renderSystem.AddMesh("Models/shapes/checkerPlane.obj"); //materials unsigned int ID_moonMat = m_renderSystem.AddMaterial(Material("Models/planets/moon/MoonMap2_2500x1250.png", "Models/planets/moon/MoonMap2_2500x1250_NRM.png", "Models/planets/moon/MoonMap2_2500x1250_NRM.png", 10)); unsigned int ID_spaceshipMat = m_renderSystem.AddMaterial(Material("Models/starwars/Arc170_blinn1.png", "Models/starwars/Arc170_blinn1_NRM.png", "Models/starwars/Arc170_blinn1_SPEC.png", 10)); unsigned int ID_checkerPlaneMat = m_renderSystem.AddMaterial(Material("Models/shapes/checker.png", "Models/shapes/checker_NRM.png", "Models/shapes/checker_SPEC.png",10)); //////////////////////////// ////// cubemap ////// std::string redsky = "Textures/Skyboxes/redsky/"; ResourceManager::CacheCubeMap("redsky", redsky + "r.png", redsky + "l.png", redsky + "up.png", // top of sphere redsky + "bot.png", // bottom of sphere redsky + "front.png", redsky + "back.png"); SetSkyboxCubeMap(ResourceManager::GetCubeMap("redsky")); //////////////// /* star wars space ship*/ ///////////////// { ECS::Component::CRenderable model; ECS::Component::CTransform trans; model.material = ID_spaceshipMat; model.mesh = ID_spaceship; trans.SetScale(glm::vec3(0.0001, 0.0001, 0.0001)); unsigned int width = 20; for (unsigned int i = 0; i < width; ++i) { for (unsigned int j = 0; j < width; ++j) { trans.SetPosition(glm::vec3(j, rand() % 30, i)); trans.SetRotation(glm::vec3(rand() % 20, rand() % 20, rand() % 20)); AddRenderableObjectToScene(i * width + j, trans, model); } } } /////////////////// /* MOON */ /////////////////// { ECS::Component::CRenderable model; ECS::Component::CTransform trans; unsigned int moonID = 1000; // set transform component vars trans.SetPosition(glm::vec3(0, 0, -5)); trans.SetScale(glm::vec3(0.1, 0.1, 0.1)); // set model component vars model.mesh = ID_MoonMesh; model.material = ID_moonMat; // add components AddRenderableObjectToScene(moonID, trans, model); } /////////////////// /*PLANE*/ { ECS::Component::CRenderable model; ECS::Component::CTransform trans; model.material = ID_checkerPlaneMat; model.mesh = ID_checkerPlaneMesh; trans.SetPosition(glm::vec3(-30,0,0)); trans.SetScale(glm::vec3(30, 30, 30)); AddRenderableObjectToScene(1010, trans, model); } }
bool mitk::GizmoInteractor::HasPickedHandle(const InteractionEvent* interactionEvent) { auto positionEvent = dynamic_cast<const InteractionPositionEvent*>(interactionEvent); if(positionEvent == NULL) { return false; } DataNode::Pointer gizmoNode = this->GetDataNode(); if (m_Gizmo.IsNull()) { return false; } if (m_ManipulatedObjectGeometry.IsNull()) { return false; } if (interactionEvent->GetSender()->GetRenderWindow()->GetNeverRendered()) { return false; } if (interactionEvent->GetSender()->GetMapperID() == BaseRenderer::Standard2D) { m_PickedHandle = PickFrom2D(positionEvent); } else { m_PickedHandle = PickFrom3D(positionEvent); } if (m_PickedHandle != Gizmo::NoHandle) { // if something relevant was picked, we calculate a number of // important points and axes for the upcoming geometry manipulations // note initial state m_InitialClickPosition2D = positionEvent->GetPointerPositionOnScreen(); m_InitialClickPosition3D = positionEvent->GetPositionInWorld(); auto renderer = positionEvent->GetSender()->GetVtkRenderer(); renderer->SetWorldPoint(m_InitialClickPosition3D[0], m_InitialClickPosition3D[1], m_InitialClickPosition3D[2], 0); renderer->WorldToDisplay(); m_InitialClickPosition2DZ = renderer->GetDisplayPoint()[2]; m_InitialGizmoCenter3D = m_Gizmo->GetCenter(); positionEvent->GetSender()->WorldToDisplay( m_InitialGizmoCenter3D, m_InitialGizmoCenter2D ); m_InitialManipulatedObjectGeometry = m_ManipulatedObjectGeometry->Clone(); switch (m_PickedHandle) { case Gizmo::MoveAlongAxisX: case Gizmo::RotateAroundAxisX: case Gizmo::ScaleX: m_AxisOfMovement = m_InitialManipulatedObjectGeometry->GetAxisVector(0); break; case Gizmo::MoveAlongAxisY: case Gizmo::RotateAroundAxisY: case Gizmo::ScaleY: m_AxisOfMovement = m_InitialManipulatedObjectGeometry->GetAxisVector(1); break; case Gizmo::MoveAlongAxisZ: case Gizmo::RotateAroundAxisZ: case Gizmo::ScaleZ: m_AxisOfMovement = m_InitialManipulatedObjectGeometry->GetAxisVector(2); break; default: break; } m_AxisOfMovement.Normalize(); m_AxisOfRotation = m_AxisOfMovement; // for translation: test whether the user clicked into the "object's real" axis direction // or into the other one Vector3D intendedAxis = m_InitialClickPosition3D - m_InitialGizmoCenter3D; if ( intendedAxis * m_AxisOfMovement < 0 ) { m_AxisOfMovement *= -1.0; } // for rotation: test whether the axis of rotation is more looking in the direction // of the camera or in the opposite vtkCamera* camera = renderer->GetActiveCamera(); vtkVector3d cameraDirection( camera->GetDirectionOfProjection() ); double angle_rad = vtkMath::AngleBetweenVectors( cameraDirection.GetData(), m_AxisOfRotation.GetDataPointer() ); if ( angle_rad < vtkMath::Pi() / 2.0 ) { m_AxisOfRotation *= -1.0; } return true; } else { return false; } }