Now we can transform!
This commit is contained in:
84
source/transformation.cpp
Normal file
84
source/transformation.cpp
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user