Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * The MIT License (MIT)
   *
   * Copyright (c) 2014 Christian Gärtner
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  * copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
  *
  * The above copyright notice and this permission notice shall be included in all
  * copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
 
 package org.achtern.AchternEngine.core.scenegraph.entity;
 
 import lombok.Getter;
 import lombok.Setter;
 
 public class Camera extends QuickEntity implements WindowChangeListener {
 
     @Getter protected float fov;
     @Getter protected float aspect;
     @Getter protected float zNear;
     @Getter protected float zFar;
 
     @Setter protected Matrix4f projection;


    
For internal use only (or for smart people out there)

Parameters:
projection The view camera-projection
 
     public Camera(Matrix4f projection) {
         setProjection(projection);
     }
 
 
     public Camera() {
         this(Window.get());
     }
 
 
     public Camera(Dimension screen) {
         this(70, (floatscreen.getWidth() / (floatscreen.getHeight());
     }
 
     public Camera(float fovfloat aspect) {
         this(fovaspect, 0.1f, 1000);
     }
 
     public Camera(float fovfloat aspectfloat zNearfloat zFar) {
         this. = fov;
         this. = aspect;
         this. = zNear;
         this. = zFar;
         setMatrix(fovaspectzNearzFar);
     }
 
     public Matrix4f getViewProjection() {
         Vector3f cameraPosition = getTransform().getTransformedPosition().mul(-1);
 
         Matrix4f cameraRotMat = getTransform().getTransformedRotation().conjugate().toRotationMatrix();
         Matrix4f cameraTransMat = new Matrix4f().initTranslation(cameraPosition.getX(), cameraPosition.getY(), cameraPosition.getZ());
 
         return .mul(getView());
     }
 
     public Matrix4f getView() {
         Vector3f cameraPosition = getTransform().getTransformedPosition().mul(-1);
 
         Matrix4f cameraRotMat = getTransform().getTransformedRotation().conjugate().toRotationMatrix();
         Matrix4f cameraTransMat = new Matrix4f().initTranslation(cameraPosition.getX(), cameraPosition.getY(), cameraPosition.getZ());
 
         return cameraRotMat.mul(cameraTransMat);
     }
 
     public void bindAsMain() {
         getEngine().getRenderEngine().setCamera(this);
     }
 
     @Override
    public void setEngine(CoreEngine engine) {
        super.setEngine(engine);
        if (engine != null) {
            engine.getRenderEngine().setCamera(this);
            engine.addWindowChangeListener(this);
        }
    }

    
    @Override
    public void removed() {
        super.removed();
        getEngine().getRenderEngine().setCamera(null);
        getEngine().removeWindowChangeListener(this);
    }
    public void setFov(float fov) {
        this. = fov;
        setMatrix(fov);
    }
    public void setAspect(float aspect) {
        this. = aspect;
        setMatrix(aspect);
    }
    public void setzNear(float zNear) {
        this. = zNear;
        setMatrix(zNear);
    }
    public void setzFar(float zFar) {
        this. = zFar;
        setMatrix(zFar);
    }
    protected void setMatrix(float fovfloat aspectfloat zNearfloat zFar) {
        if ( == null) {
             = new Matrix4f();
        }
        setProjection(.initPerspective((float) Math.toRadians(fov), aspectzNearzFar));
    }
    @Override
    public void onWindowChange(Window window) {
        setAspect((floatwindow.getWidth() / (floatwindow.getHeight());
    }
New to GrepCode? Check out our FAQ X