Warning: Page under construction!

3D rendering for constrained computing environments.

This article assumes no programming language apart from a Python-like pseudocode. It explains from the ground up all maths required for doing perspective projection. If anyone reading this is new to graphics programming in general, please be aware this guide was constructed with you in mind. For folks with a bit of background: we will be working with Q8.8 fixed points (encodable in 2 bytes), tackle the rendering of points and lines, and finally say a couple of words about backface culling.

At 24:50 you said that back faces can't be culled in screen space, but actually they can, and waaay more cheaply as well:
It's essentially similar to the simple and naive approach you mentioned at the very beginning of the video, because the perspective divide is actually going to fix the problem of using that approach: Grazing angle triangles like this, actually become "truely" back-facing, because the perspective divide would be "nudging" their back vertex to the center further away that it would the front vertices (because it's further away in Z).
You said "because the normals get messed up by the perspective divide" — well, right, but you don't actually even need to compute them in the first place...
NDC space (not screen space) is orthographic, so depth has no effect, so instead of computing the normal, you could just project the triangle orthographically (by just ignoring the Z component), and then what "would" have been a cross product, becomes like just computing the Z component of the normal: in the cross product, if you plug a 0 in all Z coordinates, the X and Y coordinates of the resulting vector nullify to zero always, so you don't even need to compute them at all to begin with. What you end up with is just like the determinant of a 2x2 matrix formed by the 2D vectors of the projected triangle's 2D vertices:

(v2.x - v1.x)*(v0.y - v1.y) - (v2.y - v1.y)*(v0.x - v1.x)

That gives you the "signed" area of the parallelogram of the screen space triangle (actually, NDC space, that's before converting to screen space), so you can just check its sign (it's the same as the sign of the area of the triangle, because the paralelogram is just this triangle twice in the same plane) — so:
No normal vectors needed, no cross product to compute them, and no dot product against an additionaly computed vector... Much simpler and cheaper.
Yes, that does mean that you have to do the perspective divide on back-facing triangles, and that increases the cost — BUT: that's only for triangles that are inside the view frustum and passed the frustum culling test, so that's not a lot of triangles in practice, all things considered. Culling back faces in view space means you have to take the normals and all that for ALL triangles in the scene (!!!) — even ones that are completely outside the frustum, because the frustum culling happens only later, in clip space.
Am I missing something?

Arnon Marcus