Introduce Camera.h/cpp defining abstract Camera, FPSCamera, OrbitCamera.
Update engine.h to include Camera and window size fields.
Implement cameraUpdate in engine.cpp handling mouse movement and key input.
Add framebuffer size and scroll callbacks for viewport resizing and zoom.
Remove legacy loop files (cube, rainbowWindow, rbgTriangle).
Adjust main.cpp formatting.
Update onCreate to load objects with textures and transforms.
Modify onUpdate to use Camera's view/projection matrices instead of hardcoded values.
- Add position, rotation and scale fields to `Mesh3D` and expose them publicly.
- Remove the old `Object3D` struct; `Objects3D` now stores `unique_ptr<Mesh3D>`.
- Implement a new `createObject(name,textures,filepath,position,rotation,scale)` overload that sets transforms after loading the mesh.
- Add a `draw(Mesh3D*)` helper that binds the texture, builds a model matrix and issues `glDrawArrays`.
- Update the rendering loop to use `draw()` instead of the old cube routine.
- Simplify `onCreate`: enable depth test, flip textures, create two objects with proper transforms, set clear color.
- Enable window resizing (`GLFW_RESIZABLE`), change default size to 800×600 in `main.cpp`.
- Clean up includes and remove unused `cube.cpp`; refactor OBJ parsing for robustness.
These changes unify object handling, allow per‑object transformations, simplify the rendering pipeline, improve maintainability, and make the window resizable.
- Introduce Mesh3D class with vertices, texture, VBO/VAO.
- Replace Object3D struct and textures map in engine with Mesh3D objects.
- Update createObject to load from file path instead of vertex array.
- Adjust cube rendering to use new vertex count.
- Remove debug prints from Texture2D loading.
- Toggle fragment shader color vs texture usage.