todo.txt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. features:
  2. - Replace assets with completely original ones, rerender images/animations.
  3. - Add optional functions (macro defs.) that get called during various rendering
  4. steps, to e.g. be able to analyze and visualize rendering step by step.
  5. - Benchmarking in test.c.
  6. - Test on big endien.
  7. - Optional OpenGL acceleration, perhaps a separate header file with the same
  8. API. How this can work:
  9. Have a new accelerated render scene function that in the first pass uses OGL
  10. to render info about pixels (barycentric, depth, ...) to a 2D "screen" array
  11. (g buffer), then in the second pass loop over these pixels and on each
  12. rendered pixel call the user pixel funct. Basically deferred rendering in
  13. which the first pass is done with OGL.
  14. - Helper functions for e.g. retrieving and caching UV coords etc. Maybe these
  15. should be in a separate file? DONE
  16. - objtool: An option to parse material groups and generate an array of
  17. per-triangle material indices. DONE
  18. - PC == 2 (and possibly 1) could likely be accelerated by not using interpolate
  19. functions, but rather FastLerStates for the values recomputed after each
  20. row segment. DONE (doesn't work
  21. for PC == 2,
  22. tried)
  23. - function for computing normals and lighting
  24. - triangle sorting:
  25. - back-to-front (slower, better memory efficiency) DONE
  26. - front-to-back (faster, but needs 1bit stencil buffer) DONE
  27. - function to set/clear stencil buffer -- can be useful
  28. - function to map one point in 3D space to screen, along with size (for mapping
  29. billboards/sprites etc.) DONE
  30. - Optimize persp. correction!
  31. - Create and use the same function for determining CW/CCW AND left/right vertex
  32. determination in triangle drawing. DONE
  33. - Check (and possibly fix) if any barycentric coord ever exceeds the range
  34. <0,255> due to rounding errors etc. DONE
  35. - dithered barycentric interpolation function that is faster than normal
  36. interpolation -- it will randomly picky one of three values, with greater
  37. probabilities at greater coords
  38. - option to disable baycentric coordinates computing DONE
  39. - Z-buffer:
  40. - full DONE
  41. - reduced (resolution and precision) DONE
  42. - more reduced (4-bit)
  43. - MipMapping? Add triangle size to pixelInfo. DONE
  44. - perspective correction modes:
  45. - none DONE
  46. - full DONE
  47. - approximate DONE
  48. - predefined 3D shapes:
  49. - cube DONE
  50. - sphere
  51. - cylinder
  52. - pyramid
  53. - plane
  54. - Depth computation during rasterization -- this should be an optional thing,
  55. specified with a define (S3L_COMPUTE_DEPTH), which may be turned on
  56. automatically for some modes (e.g. Z-buffer). It should be computed by the
  57. fast lerp and passed in the PixelInfo struct. DONE
  58. - Python tool to convert obj to C array DONE
  59. - Python tool to convert texture images to C array DONE
  60. - create demos:
  61. - model viewer DONE
  62. - game-like demo (GTA-style, Quake style etc.) DONE
  63. - offline HQ (lerp texuring, normal mapping, reflections, ...) rendering
  64. to PPM image file DONE
  65. - test offline rendering of a high-poly model (see how very small tris
  66. are rendered)
  67. - drawModel: create an option that would use a cache to not transform the same
  68. point twice DONE (doesn't work, tried)
  69. - Optional rendering stats (FPS, rendered triangles, ...).
  70. - profiling functions for optimization
  71. bugs:
  72. repeated:
  73. - valgrind (and similar) checks
  74. - optimize
  75. - write tests/benchmarks