Clipping donegit status! loading and showing sponza mini

This commit is contained in:
Krzosa Karol
2022-02-25 21:16:25 +01:00
parent fd8ce7d1a9
commit 372e4fd16b
10 changed files with 885 additions and 433 deletions

70
README.md Normal file
View File

@@ -0,0 +1,70 @@
# Things to do:
- [x] Drawing triangles
- [x] Drawing cubes and lines for testing
- [x] Y up coordinate system, left handed
- [x] Drawing a cube with perspective
- [x] Culling triangles facing away from camera
- [x] Texture mapping
- [x] Basic linear transformations - rotation, translation, scaling
- [x] Bilinear filtering of textures / subpixel precison
- [x] Nearest filtering
- [x] Fix the gaps between triangles (it also improved look of triangle edges)
- [ ] Perspective matrix vs simple perspective
- [x] Perspective correct interpolation
- [x] Depth buffer
- [x] Gamma correct blending - converting to almost linear space
- [x] Alpha blending??
- [x] Premultiplied alpha???
- [x] Merge with base
- [ ] Lightning
- [x] GLOBAL Ilumination
- [x] LookAt Camera
- [ ] FPS Camera
- [x] Reading OBJ models
- [ ] Reading OBJ .mtl files
- [ ] Reading complex obj models (sponza)
- [ ] Reading PMX files
- [ ] Rendering multiple objects, queue renderer
- [x] Clipping
- [x] Triagnle rectangle bound clipping
- [x] A way of culling Z out triangles
- [x] Simple test z clipping
- [x] Maybe should clip a triangle on znear zfar plane?
- [x] Maybe should clip out triangles that are fully z out before draw_triangle
- [ ] Subpixel precision of triangle edges
- [x] Simple profiling tooling
- [ ] Statistics based on profiler data, distribution information
- [x] 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
* http://ce-publications.et.tudelft.nl/publications/1362_hardware_algorithms_for_tilebased_realtime_rendering.pdf