#ifndef VEC3_H #define VEC3_H template struct Vec3 { T x; T y; T z; inline Vec3 operator+(Vec3 other) const { return {x + other.x, y + other.y, z + other.z}; }; inline Vec3 operator-(Vec3 other) const { return {x - other.x, y - other.y, z - other.z}; }; inline void scale(T scalar) { x *= scalar; y *= scalar; z *= scalar; }; inline T dot(Vec3 other) { return x * other.x + y * other.y + z * other.z; } inline Vec3 cross(Vec3 other) { return {y * other.z - z * other.y, z * other.x - x * other.z, x * other.y - y * other.x}; } }; #endif