Posted to tcl by auriocus at Sun Nov 26 14:39:12 GMT 2017view raw
- #include "cl.hpp" // OpenCL, here cl_float4 is defined
- typedef std::array<cl_float4, 4> mat4;
- // Diagonal matrix
- mat4 diag(float xs, float ys, float zs, float ws) {
- return mat4 {{
- {xs, 0, 0, 0},
- {0, ys, 0, 0},
- {0, 0, zs, 0},
- {0, 0, 0, ws}
- }};
- }
- // Unit matrix
- mat4 eye() {
- return diag(1, 1, 1, 1);
- }
- // Isotropic scaling
- mat4 scale(float s) {
- return diag(s, s, s, 1);
- }
- // Euler rotation matrices
- mat4 eulerz(float alpha) {
- float c = cos(alpha);
- float s = sin(alpha);
- return mat4 {{
- { c, s, 0, 0},
- {-s, c, 0, 0},
- { 0, 0, 1, 0},
- { 0, 0, 0, 1}
- }};
- }