Minecraft name:
mattbatwings
What’s a thing you have made which demonstrates sufficient engineering knowledge?:
I made a 3D Wireframe Renderer which can rotate custom wireframes on the x, y, or z axis. Most of the high level details are covered in the youtube video, but I am happy to go into as much detail as necessary during the interview.
What engineering work went into designing this device?:
First, I had to find a way to design wireframes efficiently. From a data structure perspective, having a vertex table and an edge table was an obvious choice (as wireframes are really just 3D undirected graphs), but having to fill those tables by hand in minecraft was not going to cut it for me. So, I made a python program to convert tables into minecraft schematics. This greatly improved the efficiency of inputting wireframes.
The next big problem was simulation. After initial calculations, I estimated the final clock speed to be about 500 rtps, which meant that it would be very tedious to debug. So, once again, I went to python to help me out. I created a simulator using pygame to see what the output should look like. The simulator included an adjustable focal length slider, a setting that made it to the final build as well. This made it super easy to test what new wireframes should look like before building any redstone. It proved to be extremely useful later on in the process too when it came to debugging.
Once I had these 2 python programs, most of the remaining engineering work came in the build itself. Starting with the line drawers, I implemented the 8-octant version of bresenhams algorithm from scratch, operating on a 6 tick clock. Most components were made by hand, including absolute value units, custom data loop devices, and more.
From there, I created what I call the “wireframe interpreter”, which takes the vertex table and edge table as input and converts it to a 5hz stream of vertex pairs that can be sent directly to the line drawers to be drawn. This involved designing a temporary storage for the vertex table and an “iterator” that iterates through it using the edge table as sequential memory accesses.
Now that I could draw still wireframes to the screen, I had to figure out how to do rotation and animation. I developed a custom “rotator” device which uses 4 multipliers (my own multiplier design) and a sin/cos rom to rotate any vertex along the x, y, or z axis. Typically this would require a 3x3 matrix, but I used some clever muxing in the front of the device to get it done with a 2x2 matrix instead. This allowed the device to be way smaller.
Finally, I built a double-buffered passthrough screen, and spent a few weeks in control logic hell. When it was all set and done, I had created a 3D Wireframe renderer with support for x/y/z rotation and custom wireframes, a simulator, and a hell of lot more redstone experience.
Image/s and/or video/s of the device: