// This file is part of the 64k demo project. // It defines the base 3D Object structure. // Handles transforms and bounding volumes for hybrid rendering. #pragma once #include "util/mini_math.h" enum class ObjectType { CUBE, SPHERE, PLANE, TORUS // Add more SDF types here }; struct BoundingVolume { vec3 min; vec3 max; }; class Object3D { public: vec3 position; quat rotation; vec3 scale; ObjectType type; // Material parameters could go here (color, roughness, etc.) vec4 color; Object3D(ObjectType t = ObjectType::CUBE) : position(0, 0, 0), rotation(0, 0, 0, 1), scale(1, 1, 1), type(t), color(1, 1, 1, 1) { } mat4 get_model_matrix() const { mat4 T = mat4::translate(position); mat4 R = rotation.to_mat(); mat4 S = mat4::scale(scale); // M = T * R * S return T * (R * S); } // Returns the local-space AABB of the primitive (before transform) // Used to generate the proxy geometry for rasterization. BoundingVolume get_local_bounds() const { // Simple defaults for unit primitives return {{-1, -1, -1}, {1, 1, 1}}; } };