Renderer/src/main/java/electrosphere/renderer/Camera.java
2021-04-01 23:08:49 -04:00

40 lines
1.5 KiB
Java

package electrosphere.renderer;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
import org.joml.Vector3f;
/**
*
* @author satellite
*/
public class Camera {
public Vector3f pos_Center = new Vector3f(0,0,0);
// public Vector3f pos_Front = new Vector3f(0,0,0);
// public Vector3f pos_Top = new Vector3f(0,0,0);
public Quaternionf rotation = new Quaternionf();
public Camera(){
}
public void apply_camera(Camera c){
pos_Center = new Vector3f(c.pos_Center);
rotation = new Quaternionf(c.rotation);
}
public Matrix4f get_view_matrix(){
Matrix4f rVal = new Matrix4f();
// rVal.setLookAt(pos_Center, pos_Front, pos_Top);
Vector3f up = new Vector3f(pos_Center);
//new Vector3f(pos_Center).add(new Quaternionf(rotation)..transform(new Vector3f(1,0,0)))
Vector3f up_modifier = new Vector3f(1,0,0);
Quaternionf up_transformation = new Quaternionf(rotation);
up_transformation.rotateAxis((float)Math.PI/2.0f, new Vector3f(up).cross(new Vector3f(0,1,0))); // the hard part is getting the axis in this logic to correspond to the vertical
up = up.add(up_transformation.transform(up_modifier));
rVal.setLookAt(pos_Center, //where our camera is
new Vector3f(pos_Center).add(rotation.transform(new Vector3f(1,0,0))), //where our camera wants to look
up); //where "up" is relative to our camera
return rVal;
}
}