123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /*
- * 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;
- }
|