mirror of
https://git.coom.tech/drummyfish/small3dlib.git
synced 2024-11-21 20:39:57 +01:00
79 lines
2.7 KiB
Text
79 lines
2.7 KiB
Text
features:
|
|
|
|
- presets that can be optionally selected and will configure other constants
|
|
(e.g. a "low memory sort strategy" will turn z-buffer off and turn
|
|
back-to-front sorting on).
|
|
|
|
- function for computing normals and lighting
|
|
|
|
- triangle sorting:
|
|
- back-to-front (slower, better memory efficiency) DONE
|
|
- front-to-back (faster, but needs 1bit stencil buffer) DONE
|
|
|
|
- function to set/clear stencil buffer -- can be useful
|
|
|
|
- Optimize persp. correction!
|
|
|
|
- Create and use the same function for determining CW/CCW AND left/right vertex
|
|
determination in triangle drawing.
|
|
|
|
- Check (and possibly fix) if any barycentric coord ever exceeds the range
|
|
<0,255> due to rounding errors etc.
|
|
|
|
- dithered barycentric interpolation function that is faster than normal
|
|
interpolation -- it will randomly picky one of three values, with greater
|
|
probabilities at greater coords
|
|
|
|
- option to disable baycentric coordinates computing DONE
|
|
|
|
- Z-buffer:
|
|
- full DONE
|
|
- reduced (resolution and precision) DONE
|
|
- more reduced (4-bit)
|
|
|
|
- MipMapping? Add triangle size to pixelInfo. DONE
|
|
|
|
- perspective correction modes:
|
|
- none DONE
|
|
- full DONE
|
|
- triangle subdivision (each triangle side will be subdivided after reaching
|
|
a defined length, which will be measured by Chebyshev or similarly fast
|
|
distance).
|
|
- also offer some approximation function?
|
|
|
|
- predefined 3D shapes:
|
|
- cube DONE
|
|
- sphere
|
|
- cylinder
|
|
- pyramid
|
|
- plane
|
|
|
|
- Depth computation during rasterization -- this should be an optional thing,
|
|
specified with a define (S3L_COMPUTE_DEPTH), which may be turned on
|
|
automatically for some modes (e.g. Z-buffer). It should be computed by the
|
|
fast lerp and passed in the PixelInfo struct. DONE
|
|
- Python tool to convert obj to C array DONE
|
|
- create demos
|
|
- drawModel: create an option that would use a cache to not transform the same
|
|
point twice
|
|
- Optional rendering stats (FPS, rendered triangles, ...).
|
|
- profiling functions for optimization
|
|
|
|
bugs:
|
|
|
|
- Determining CW/CCW for a triangle is not 100% exact, sometimes leaves holes in
|
|
models (some very thin triangles)!
|
|
|
|
- With PC = 2, triangles that are at a too sharp angle can get very weird values
|
|
of barycentric AND DEPTH (which messes up the z-buffer). Seems to only affect
|
|
triangles facing right (not left).
|
|
|
|
- Barycentric coodinates can get wrong in these ways:
|
|
- Any of them can exceed the range <0,511>
|
|
- b0 + b1 can be > 511, which causes b2 (= 511 - b0 - b1) to be negative!
|
|
|
|
repeated:
|
|
|
|
- valgrind (and similar) checks
|
|
- optimize
|
|
- write tests/benchmarks
|