#include "Matrix.hpp" #include "Transform.hpp" #include Matrix Transform_Translate(Point& translation) { Matrix result; result.e41 = translation.x; result.e42 = translation.y; result.e43 = translation.z; return result; } Matrix Transform_Rotate(Point& rotation) { // YXZ Euler rotation float cosThetaY = cosf(rotation.y); float sinThetaY = sinf(rotation.y); Matrix tRotateY; tRotateY.e11 = cosThetaY; tRotateY.e13 = -sinThetaY; tRotateY.e31 = sinThetaY; tRotateY.e33 = cosThetaY; float cosThetaX = cosf(rotation.x); float sinThetaX = sinf(rotation.x); Matrix tRotateX; tRotateX.e22 = cosThetaX; tRotateX.e23 = sinThetaX; tRotateX.e32 = -sinThetaX; tRotateX.e33 = cosThetaX; float cosThetaZ = cosf(rotation.z); float sinThetaZ = sinf(rotation.z); Matrix tRotateZ; tRotateZ.e11 = cosThetaZ; tRotateZ.e12 = sinThetaZ; tRotateZ.e21 = -sinThetaZ; tRotateZ.e22 = cosThetaZ; Matrix result = tRotateY * tRotateX * tRotateZ; return result; } Matrix Transform_Scale(float scale) { Matrix result; result.e11 = scale; result.e22 = scale; result.e33 = scale; return result; } Matrix Transform_View(Camera& camera) { Point invPosition = -camera.position; Matrix tInvTranslate = Transform_Translate(invPosition); Point invRotation = -camera.rotation; Matrix tInvRotate = Transform_Rotate(invRotation); Matrix result = tInvTranslate * tInvRotate; return result; } Matrix Transform_Perspective(Camera& camera) { Matrix result; result.e11 = camera.xZoom; result.e22 = camera.yZoom; result.e33 = camera.zClipBias0; result.e34 = 1; result.e43 = camera.zClipBias1; return result; } Matrix Transform_Screen(Camera& camera) { Matrix result; result.e11 = camera.xScale; result.e41 = camera.xScale; result.e22 = -camera.yScale; result.e42 = camera.yScale; return result; }