/tipsy

tiny playstationy renderer

Primary LanguageCMIT LicenseMIT

tipsy

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

Models, for educational purposes, can be found here: https://www.models-resource.com/playstation/

building

Building requires C99 compiler & OpenGL. Supported platforms & building prerequisites are provided below:

  • Linux

    # ubuntu 22.04
    sudo apt install -y build-essential libglu1-mesa-dev
    
    # fedora 37
    sudo dnf install -y gcc mesa-libGLU-devel
    
  • MacOS

    Install Xcode. MacOS Monterey ships with (now deprecated) OpenGL by default.

  • Windows (untested)

Get the source & run:

make

usage

./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

credits

  • 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.