You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
1.8 KiB
105 lines
1.8 KiB
#include "Matrix.hpp" |
|
#include "Transform.hpp" |
|
#include <cmath> |
|
|
|
|
|
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; |
|
}
|
|
|