372e4fd16b7bd447a87303435519200abce3f247
Things to do:
- Drawing triangles
- Drawing cubes and lines for testing
- Y up coordinate system, left handed
- Drawing a cube with perspective
- Culling triangles facing away from camera
- Texture mapping
- Basic linear transformations - rotation, translation, scaling
- Bilinear filtering of textures / subpixel precison
- Nearest filtering
- Fix the gaps between triangles (it also improved look of triangle edges)
- Perspective matrix vs simple perspective
- Perspective correct interpolation
- Depth buffer
- Gamma correct blending - converting to almost linear space
- Alpha blending??
- Premultiplied alpha???
- Merge with base
- Lightning
- GLOBAL Ilumination
- LookAt Camera
- FPS Camera
- Reading OBJ models
- Reading OBJ .mtl files
- Reading complex obj models (sponza)
- Reading PMX files
- Rendering multiple objects, queue renderer
- Clipping
- Triagnle rectangle bound clipping
- A way of culling Z out triangles
- Simple test z clipping
- Maybe should clip a triangle on znear zfar plane?
- Maybe should clip out triangles that are fully z out before draw_triangle
- Subpixel precision of triangle edges
- Simple profiling tooling
- Statistics based on profiler data, distribution information
- Find cool profilers - ExtraSleepy, Vtune
- Optimizations
- Inline edge function
- Edge function to integer
- Use integer bit operations to figure out if plus. (edge1|edge2|edge3)>=0
- SIMD
- Multithreading
- Text rendering
- Basic UI
- Gamma correct and alpha blending
Resources that helped me build the rasterizer (Might be helpful to you too):
- Algorithm I used for triangle rasterization by Juan Pineda: https://www.cs.drexel.edu/~david/Classes/Papers/comp175-06-pineda.pdf
- Fabian Giessen's "Optimizing Software Occlusion Culling": https://fgiesen.wordpress.com/2013/02/17/optimizing-sw-occlusion-culling-index/
- Fabian Giessen's optimized software renderer: https://github.com/rygorous/intel_occlusion_cull/tree/blog/SoftwareOcclusionCulling
- Fabian Giessen's javascript triangle rasterizer: https://gist.github.com/rygorous/2486101
- Fabian Giessen's C++ triangle rasterizer: https://github.com/rygorous/trirast/blob/master/main.cpp
- Joy's Kenneth lectures about computer graphics: https://www.youtube.com/playlist?list=PL_w_qWAQZtAZhtzPI5pkAtcUVgmzdAP8g
- Joy's Kenneth article on clipping: https://import.cdn.thinkific.com/167815/JoyKennethClipping-200905-175314.pdf
- A bunch of helpful notes and links to resources: https://nlguillemot.wordpress.com/2016/07/10/rasterizer-notes/
- Very nice paid course on making a software rasterizer using a scanline method: https://pikuma.com/courses/learn-3d-computer-graphics-programming
- Reference for obj loader: https://github.com/tinyobjloader/tinyobjloader/blob/master/tiny_obj_loader.h
To read
Description
Languages
C++
99.9%