the implementation is going to be completely vectorized through every step of the process, for loops will be avoided like the plague
local object cooordinates are transformed into world coordinates when loaded into the scene. note: track where they are in the world geometry array so they can be easily subbed out
geometry culling does not work for culling entire polygons, it needs to be able to receive structured lists to do that effectively
playlist ray plane intersection ray triangle intersection projections efficient triangle rasterization
- Application
- User Input
- Animation
- Geometry
- model & camera transformation
- lighting
- projection
- clipping
- window->viewport transformation
- Rasterization
transform world geometry into camera-relative geometry where the camera faces into positive z for easy math
textured materials reflection and refraction obj handling radiance mapping depth of field shaders
coordinate system: blender system, right handed with z pointing upwards rotation: positive is counter-clockwise
soh cah toa
sin of theta = opposite/hypotenuse cos of theta = adjacent/hypotenuse tan of theta = opposite/adjacent
- object coordinates: vertexes are defined relative to their object origin
- world coordinates: vertexes are defined relative to the world origin
- camera space: vertexes are defined relative to the camera's perspective aka eye/view space
- projection space: 2d points
- clip space: 2d points where anything over |1| is out
- screen space: coordinates that correspond to a position on the screen