Now we can transform!
This commit is contained in:
@@ -3,8 +3,8 @@
|
||||
# First most is build as a library
|
||||
add_library(rayonnement STATIC)
|
||||
|
||||
set(RAY_HEADERS include/tuples.h include/math_helper.h include/colour.h include/canvas.h include/matrix.h)
|
||||
set(RAY_SOURCES tuples.cpp math_helper.cpp colour.cpp canvas.cpp matrix.cpp)
|
||||
set(RAY_HEADERS include/tuples.h include/math_helper.h include/colour.h include/canvas.h include/matrix.h include/transformation.h)
|
||||
set(RAY_SOURCES tuples.cpp math_helper.cpp colour.cpp canvas.cpp matrix.cpp transformation.cpp)
|
||||
|
||||
target_include_directories(rayonnement PUBLIC include)
|
||||
target_sources(rayonnement PRIVATE ${RAY_HEADERS} ${RAY_SOURCES})
|
||||
|
||||
24
source/include/transformation.h
Normal file
24
source/include/transformation.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* DoRayMe - a quick and dirty Raytracer
|
||||
* Transformation header
|
||||
*
|
||||
* Created by Manoël Trapier
|
||||
* Copyright (c) 2020 986-Studio.
|
||||
*
|
||||
*/
|
||||
#ifndef DORAYME_TRANSFORMATION_H
|
||||
#define DORAYME_TRANSFORMATION_H
|
||||
|
||||
#include <matrix.h>
|
||||
|
||||
Matrix translation(double x, double y, double z);
|
||||
|
||||
Matrix scaling(double x, double y, double z);
|
||||
|
||||
Matrix rotation_x(double angle);
|
||||
Matrix rotation_y(double angle);
|
||||
Matrix rotation_z(double angle);
|
||||
|
||||
Matrix shearing(double Xy, double Xx, double Yx, double Yz, double Zx, double Zy);
|
||||
|
||||
#endif /* DORAYME_TRANSFORMATION_H */
|
||||
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