3D Studio is a C++ / OpenGL rendering engine developed as part of the Computer Graphics course at Umeå University. This project implements a modern programmable graphics pipeline, featuring custom shader support, dynamic lighting, texture mapping, and an interactive camera system.
- OBJ Loader: Custom parser for loading 3D geometry from
.objfiles. - Programmable Pipeline: Vertex and Fragment shaders implemented in GLSL.
- Transformations: Full support for Affine transformations (Translation, Rotation, Scaling).
- Lighting Models: Per-pixel shading implementing Phong/Blinn-Phong reflection models.
- Texture Mapping: Support for 2D textures using two-part mapping.
- Material System: Adjustable material properties (ambient, diffuse, specular) via GUI.
- Interactive Camera: Free-moving camera with look-at functionality.
- Projections: Support for Perspective, Orthographic, and Oblique projections.
- Viewport: Dynamic aspect ratio handling.
- GUI: Integrated Dear ImGui interface for real-time parameter adjustment.
- Scene Control: Load models, toggle textures, and change light positions at runtime.
This project is distributed across three archives (porject1.zip, porject2.zip, porject3.zip) representing different development stages. Use the content of porject3 for the final version, as it supersedes the previous parts.
Ensure the following libraries are installed on your system or placed in a local ./lib folder:
- GLFW3 (Windowing and Input)
- GLEW (OpenGL Extension Wrangler)
- Dear ImGui (UI Library - source files expected in build path)
- stb_image (Image loading)
- Merge Files: Extract the contents of
porject3.zip. - Restore Libraries: Create a
lib/directory and place the required binaries/headers there. - Compile: Use the provided Makefile.
cd 3DStudio make ./3dstudio
| Key | Action |
|---|---|
| W / S | Move Forward / Backward (Z-axis) |
| A / D | Move Left / Right (X-axis) |
| Q / E | Move Down / Up (Y-axis) |
| Mouse + Click | Rotate Camera (Orbit) |
| Key | Action |
|---|---|
| Arrow Keys | Rotate Object around X/Y axes |
| I / K | Translate Object vertically |
| J / L | Translate Object horizontally |
main.cpp: Entry point and main loop.openglwindow.cpp: Window context and event handling.geometryrender.cpp: Handles VAO/VBO setup and drawing calls.vshader.glsl/fshader.glsl: Vertex and Fragment shaders.sphere.obj: Sample 3D model.
Author: [Antonio Ramírez]
Course: Computer Graphics (5DV179) - Umeå University
Instructor: Stefan Johansson
Based on project specifications from 2025.