tipsy (tiny playstationy) is a PS1-like software renderer written in ~500 lines of C99.
Features all the charm of the original PS1, like:
- low resolution display (320x240)
- no texture filtering (pixelated textures)
- affine texture mapping (warped textures)
- no anti-aliasing (chunky edges)
- lack of subpixel rasterization (polygon jittering/wobble)
- old shading techniques (flat & Gouraud)
demo.mp4
Building requires C99 compiler & OpenGL (see makefile
).
The project should compile on:
- Linux (tested on Ubuntu 20.04)
- MacOS (tested on Monterey)
- Windows (untested)
Get the source & run:
make
./tipsy path/to/wavefront.obj
Hold down the left mouse button and drag to rotate.
Keybindings:
- Left/Right: rotate horizontally
- Up/Down: rotate vertically
- W: toggle wireframe drawing
- Z: toggle z-buffering
- P: toggle perspective correct texture mapping (default = off)
- C: toggle back/front face culling (default = back)
- J: toggle jittering (default = on)
- F: toggle vertical flip
- R: reset model position
- 1: switch off shading (default)
- 2: switch to flat shading
- 3: switch to gouraud shading
- Building a PS1 style retro 3D renderer
article by David Colson.
Polygon jittering imitation technique was taken from there. - Playstation Architecture
article by Rodrigo Copetti.
Provides a good overview of the PSX architecture. - gel by Gustav Louw. Similar project with the same spirit.
- tigr by Erik Agsjö. The graphics library the project relies on.