Now we can transform!

This commit is contained in:
Godzil
2020-02-14 23:28:56 +00:00
parent 514bd649c1
commit dee4b9ae91
5 changed files with 302 additions and 3 deletions

84
source/transformation.cpp Normal file
View File

@@ -0,0 +1,84 @@
/*
* DoRayMe - a quick and dirty Raytracer
* Transformation implementation
*
* Created by Manoël Trapier
* Copyright (c) 2020 986-Studio.
*
*/
#include <math.h>
#include <transformation.h>
Matrix translation(double x, double y, double z)
{
Matrix ret = Matrix4().identity();
ret.set(0, 3, x);
ret.set(1, 3, y);
ret.set(2, 3, z);
return ret;
}
Matrix scaling(double x, double y, double z)
{
Matrix ret = Matrix4();
ret.set(0, 0, x);
ret.set(1, 1, y);
ret.set(2, 2, z);
ret.set(3, 3, 1);
return ret;
}
Matrix rotation_x(double angle)
{
Matrix ret = Matrix4().identity();
ret.set(1, 1, cos(angle));
ret.set(1, 2, -sin(angle));
ret.set(2, 1, sin(angle));
ret.set(2, 2, cos(angle));
return ret;
}
Matrix rotation_y(double angle)
{
Matrix ret = Matrix4().identity();
ret.set(0, 0, cos(angle));
ret.set(0, 2, sin(angle));
ret.set(2, 0, -sin(angle));
ret.set(2, 2, cos(angle));
return ret;
}
Matrix rotation_z(double angle)
{
Matrix ret = Matrix4().identity();
ret.set(0, 0, cos(angle));
ret.set(0, 1, -sin(angle));
ret.set(1, 0, sin(angle));
ret.set(1, 1, cos(angle));
return ret;
}
Matrix shearing(double Xy, double Xz, double Yx, double Yz, double Zx, double Zy)
{
Matrix ret = Matrix4().identity();
ret.set(0, 1, Xy);
ret.set(0, 2, Xz);
ret.set(1, 0, Yx);
ret.set(1, 2, Yz);
ret.set(2, 0, Zx);
ret.set(2, 1, Zy);
return ret;
}