tipsy icon indicating copy to clipboard operation
tipsy copied to clipboard

tiny playstationy renderer

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)

https://user-images.githubusercontent.com/4911300/182365285-0148b08a-5b33-4bf3-9e48-d0fdd7f286bd.mp4

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