#ifndef O3D_OBJ3D_H #define O3D_OBJ3D_H #include #include #include #include "o3d/vertex.h" #include "o3d/tri_vertex.h" namespace engine::o3d { class Object3D { public: class TriangleVertex3Iterator { public: using iterator_category = std::input_iterator_tag; using value_type = TriangleVertex3; using difference_type = TriangleVertex3; using pointer = const TriangleVertex3*; using reference = TriangleVertex3; explicit TriangleVertex3Iterator(const Object3D* obj, int face_ind = 0); TriangleVertex3Iterator& operator++(); TriangleVertex3Iterator operator++(int); bool operator==(TriangleVertex3Iterator other) const; bool operator!=(TriangleVertex3Iterator other) const; reference operator*() const; private: const Object3D* obj; int face_ind; }; static Object3D cube(); // this function should not be in this file Object3D(std::vector pts, std::vector> faces); TriangleVertex3Iterator begin(); TriangleVertex3Iterator end(); private: std::vector pts; std::vector> faces; }; } #endif // O3D_OBJ3D_H