package electrosphere.renderer; import org.joml.Matrix4f; import org.joml.Quaternionf; import org.joml.Vector3f; /** * * @author satellite */ @Deprecated 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; } }