Triangle filler by @kihuy I finally managed to make a projection script for 3D objects, now I need to implement back-face culling and a sorting algoritm for vertexes. This engine is by no means block efficient, however, I tried to make it simple in that way that you can expand your scene with objects easily through a buffer instead of having to manually set up a system for tinkering with individual objects in the scene. The mathematics behind the projection script in this project are directly taken from https://en.wikipedia.org/wiki/3D_projection. Explanation: There are three buffers. create 3d_stack 2d_stack These buffers have a lot of things in common, however, they are used in different stages of the operations. They all contain some basic data instructions: coordinates penup pendown colour In the create and 3d_stack buffers, the coordinates are grouped in groups of 9 coordinates to form a triangle. In the 2d_stack buffer, the coordinates are grouped in 6 to form a triangle. The scripts in this project read three coordinates at a time instead of computing a whole triangle's operations at a time for code simplicity. When an object is created, it is first placed in the create buffer to apply transformations on it. In the create buffer it may be rotated or scaled to then be inserted into the 3d buffer. The 3d buffer acts like a temporary stack for all objects in the scene so that they can be computed in one go. It contains the same data as the create buffer, just with all other objects you have created. To convert objects in the 3d buffer to 2d space, a script called 'process stacks' is run to project all objects and place them in the 2d_stack buffer. The renderer will read from the 2d_stack buffer to render the scene.