コード例 #1
0
ファイル: Scene.cpp プロジェクト: AsherBond/Application-SDK
   //---------------------------------------------------------------------------
   void Scene::Render(IRenderEngine* pRenderEngine)
   {
      // render scene

      Camera* pCamera = GetActiveCamera();
      if (pCamera)
      {
         // update camera!
      }


   }
コード例 #2
0
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();
}
コード例 #3
0
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
}
コード例 #4
0
		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);
			}
			
		}
コード例 #5
0
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;
  }
}