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