On Sunday, 5 August 2018 at 05:22:44 UTC, Mike Franklin wrote:
On Sunday, 5 August 2018 at 04:47:42 UTC, tanner00 wrote:
Hi, I’m interested in working on this project and just wanted
to touch base. Is there any word on who will be mentoring this
project? I’m entering college this fall but I’ve been
programming since a very young age and enjoy systems
programming.
The project is mostly about creating high-performance,
resource-efficient 2D software rasterizer, something like this
(http://nothings.org/gamedev/rasterize/) or
(https://medium.com/@raphlinus/inside-the-fastest-font-renderer-in-the-world-75ae5270c445) If that isn't enough work for the event you can build on it by creating path objects with clipping and offsetting (http://angusj.com/delphi/clipper.php), rasterizing TrueType or OpenType fonts, creating drawing primitives, and even potentially creating 2D widgets (buttons, text labels, etc.) I think it's up to you how much of it you want to take on.
I proposed the idea, but I don't think I'd be a very good
mentor for the project because I've never created a 2D
rasterizer myself. However, I'd be happy to help anyone
working on the project in an unofficial capacity, and can
probably articulate the intended use case for it.
Mike
I was 14 and a half when I implemented my first depth buffer
based rasterizer, in 6502 assembly on a C64, for a hi-res mode 3D
renderer.
The algorithm, despite being "naive", is actually still an
efficient one even now.
I stored an array of x/depth ranges (one per raster line), and
updated them while drawing the wireframe points of the 3 clipped
edges, while updating the y range of the triangle.
Then I simply iterated on the triangle y range and drew the inner
points (between minimum_x+1 and maximum_x-1), using the filling
color and interpolating depth.
Clearly not realtime as my character-based wireframe renderer, I
admit it.
But this more than fast enough to quickly render a hi-res 3d
scene in memory in *filled* mode.
So this "dumb" algorithm may still be worth being investigated in
your case, as this C64 implementation was meant to run on a
rather similar hardware (very limited memory and CPU, only fixed
point operations, etc).
Just add antialiasing on the wireframe edges and you're done...