This project is a Python-based software rendering engine built from scratch.
It implements the foundations of a 3D graphics pipeline, including vector math, perspective projection, transformations, and rendering of .obj models.
Unlike hardware-accelerated engines (OpenGL, Vulkan), this renderer runs entirely in Python, which makes it easier to understand and experiment with the inner workings of a graphics pipeline.
- Load and render
.obj3D models (examples included:house.obj,tinker.obj) - Basic math library for vectors and triangles
- Rotation utilities and perspective projection
- Modular design:
maths/→ vector and triangle mathrendering/→ rendering pipeline and transformations
- Written entirely in Python for clarity and learning purposes
- Python 3.11+
- Dependencies: (if you use any external packages, list them here; otherwise just Python standard library)
python app.pyBy default, example .obj models are located in the obj/ folder.
You can replace or add your own .obj files for rendering.
python app.py obj/house.objRenderingEngine/
│
├── app.py # Entry point
├── maths/ # Math utilities
│ ├── Vector.py
│ ├── Triangle.py
│
├── rendering/ # Rendering engine core
│ ├── Render.py
│ ├── Perspective.py
│ ├── RotationUtils.py
│
├── obj/ # Example 3D models
│ ├── house.obj
│ ├── tinker.obj
- Add lighting (Phong, Gouraud, flat shading)
- Implement z-buffer for depth handling
- Texture mapping
- Interactive camera controls
- Export rendered frames to images or video
This project is built for learning and experimenting with the fundamentals of computer graphics.
It is not designed to be fast, but to clearly show how rendering works under the hood.
Made by Gerald Negvesky