nuclear@0: #ifndef OBJECT_H_ nuclear@0: #define OBJECT_H_ nuclear@0: nuclear@0: #include "mesh.h" nuclear@0: #include "geom.h" nuclear@0: #include "vmath/vmath.h" nuclear@0: nuclear@0: struct Material { nuclear@0: Vector3 diffuse; nuclear@0: Vector3 specular; nuclear@0: float shininess; nuclear@0: float alpha; nuclear@0: nuclear@0: Material(); nuclear@0: }; nuclear@0: nuclear@0: struct RenderOps { nuclear@0: bool zwrite; nuclear@0: bool cast_shadows; nuclear@0: bool transparent; nuclear@0: nuclear@0: RenderOps(); nuclear@0: void setup() const; nuclear@0: }; nuclear@0: nuclear@0: class Object { nuclear@0: private: nuclear@0: Mesh *mesh; nuclear@0: Matrix4x4 matrix; nuclear@0: unsigned int tex; nuclear@0: Matrix4x4 tex_matrix; nuclear@0: unsigned int sdr; nuclear@0: nuclear@0: public: nuclear@0: Material mtl; nuclear@0: RenderOps rop; nuclear@0: nuclear@0: Object(); nuclear@0: ~Object(); nuclear@0: nuclear@0: Matrix4x4 &xform(); nuclear@0: const Matrix4x4 &xform() const; nuclear@0: nuclear@0: Matrix4x4 &tex_xform(); nuclear@0: const Matrix4x4 &tex_xform() const; nuclear@0: nuclear@0: void set_mesh(Mesh *m); nuclear@0: Mesh *get_mesh() const; nuclear@0: nuclear@0: void set_texture(unsigned int tex); nuclear@0: void set_shader(unsigned int sdr); nuclear@0: unsigned int get_shader() const; nuclear@0: nuclear@0: void draw() const; nuclear@0: void draw_wire(const Vector4 &col = Vector4(1, 1, 1, 1)) const; nuclear@0: void draw_vertices(const Vector4 &col = Vector4(1, 0.3, 0.2, 1)) const; nuclear@0: void draw_normals(float len = 1.0, const Vector4 &col = Vector4(0.1, 0.2, 1.0, 1)) const; nuclear@0: void draw_tangents(float len = 1.0, const Vector4 &col = Vector4(0.1, 1.0, 0.2, 1)) const; nuclear@0: nuclear@0: bool intersect(const Ray &ray, HitPoint *hit) const; nuclear@0: }; nuclear@0: nuclear@0: #endif // OBJECT_H_