1. 14 Jun, 2021 1 commit
  2. 13 Jun, 2021 1 commit
    • Vanessa Karolek's avatar
      [#42][Refactor] huge update - see body text · 1bd7ed1e
      Vanessa Karolek authored
      1) Now there is only one camera class (no inheritance anymore). Furthermore, the camera object is separated from camera controls and only manages camera specific information, such as the view matrix, projection matrix, the position, etc. Camera controls are now handled via camera controller objects.
      2) The CameraManager now manages an arbitrary number of camera controllers, such as PilotCameraController or TrackballCameraController (TraceCameraController will be implemented soon!). Before you can use a camera object in your render loop, you need to add at least one camera. You do not have to use a camera controller to render something, but you need to implement camera movements yourself... If you want to CONTROL a camera object, you can make use of the existing camera controller objects. To create a controller, you need to add a camera controller object to the camera manager and specify which camera should be used for this controller. You can change the bound camera whenever you like to. To switch between all existing camera controllers, you can use the active controller in the render loop and change the cycle between all camera controllers via Tab.
      See the example projects for an examplary application.
      3) Currently, events are only handled for the active camera controller.
      4) DISCUSSION: We use the 'new' keyword within the camera manager class. Unfortunately, we did not find any other way to create an object (such as the camera controller) inside the scope of one function and make use of the inheritance (only pointers seem to support this) or to refer to an object that updates everywhere where it is refered. To not lose the object at specified memory location, we need to create it via 'new' and ensure that all allocated objects are deleted within the destructor of the camera manager. Find this lines at the 'TODO' marked locations. If you have a better idea to solve this problem, please let us know. :)