62 lines
2.9 KiB
Java
62 lines
2.9 KiB
Java
package io.github.hydos.ginger.engine.mathEngine;
|
|
|
|
import io.github.hydos.ginger.engine.cameras.ThirdPersonCamera;
|
|
import io.github.hydos.ginger.engine.mathEngine.matrixes.Matrix4f;
|
|
import io.github.hydos.ginger.engine.mathEngine.vectors.Vector2f;
|
|
import io.github.hydos.ginger.engine.mathEngine.vectors.Vector3f;
|
|
|
|
public class Maths {
|
|
|
|
public static Matrix4f createTransformationMatrix(Vector3f translation, float rx, float ry, float rz, Vector3f scale) {
|
|
Matrix4f matrix = new Matrix4f();
|
|
matrix.setIdentity();
|
|
Matrix4f.translate(translation, matrix, matrix);
|
|
Matrix4f.rotate((float) Math.toRadians(rx), new Vector3f(1,0,0), matrix, matrix);
|
|
Matrix4f.rotate((float) Math.toRadians(ry), new Vector3f(0,1,0), matrix, matrix);
|
|
Matrix4f.rotate((float) Math.toRadians(rz), new Vector3f(0,0,1), matrix, matrix);
|
|
Matrix4f.scale(scale, matrix, matrix);
|
|
return matrix;
|
|
}
|
|
|
|
public static Matrix4f createViewMatrix(ThirdPersonCamera camera) {
|
|
Matrix4f viewMatrix = new Matrix4f();
|
|
viewMatrix.setIdentity();
|
|
Matrix4f.rotate((float) Math.toRadians(camera.getPitch()), new Vector3f(1, 0, 0), viewMatrix, viewMatrix);
|
|
Matrix4f.rotate((float) Math.toRadians(camera.getYaw()), new Vector3f(0, 1, 0), viewMatrix, viewMatrix);
|
|
Matrix4f.rotate((float) Math.toRadians(camera.getRoll()), new Vector3f(0, 0, 1), viewMatrix, viewMatrix);
|
|
Vector3f cameraPos = camera.getPosition();
|
|
Vector3f negativeCameraPos = new Vector3f(-cameraPos.x,-cameraPos.y,-cameraPos.z);
|
|
Matrix4f.translate(negativeCameraPos, viewMatrix, viewMatrix);
|
|
return viewMatrix;
|
|
}
|
|
|
|
public static float barryCentric(Vector3f p1, Vector3f p2, Vector3f p3, Vector2f pos) {
|
|
float det = (p2.z - p3.z) * (p1.x - p3.x) + (p3.x - p2.x) * (p1.z - p3.z);
|
|
float l1 = ((p2.z - p3.z) * (pos.x - p3.x) + (p3.x - p2.x) * (pos.y - p3.z)) / det;
|
|
float l2 = ((p3.z - p1.z) * (pos.x - p3.x) + (p1.x - p3.x) * (pos.y - p3.z)) / det;
|
|
float l3 = 1.0f - l1 - l2;
|
|
return l1 * p1.y + l2 * p2.y + l3 * p3.y;
|
|
}
|
|
|
|
public static Matrix4f createTransformationMatrix(Vector2f translation, Vector2f scale) {
|
|
Matrix4f matrix = new Matrix4f();
|
|
matrix.setIdentity();
|
|
Matrix4f.translate(translation, matrix, matrix);
|
|
Matrix4f.scale(new Vector3f(scale.x, scale.y, 1f), matrix, matrix);
|
|
return matrix;
|
|
}
|
|
|
|
public static Matrix4f createTransformationMatrix(Vector3f translation, float rx, float ry, float rz, float scale) {
|
|
Matrix4f matrix = new Matrix4f();
|
|
matrix.setIdentity();
|
|
Matrix4f.translate(translation, matrix, matrix);
|
|
Matrix4f.rotate((float) Math.toRadians(rx), new Vector3f(1,0,0), matrix, matrix);
|
|
Matrix4f.rotate((float) Math.toRadians(ry), new Vector3f(0,1,0), matrix, matrix);
|
|
Matrix4f.rotate((float) Math.toRadians(rz), new Vector3f(0,0,1), matrix, matrix);
|
|
Vector3f newScale = new Vector3f(scale,scale,scale);
|
|
Matrix4f.scale(newScale, matrix, matrix);
|
|
return matrix;
|
|
}
|
|
|
|
}
|