zbuffer accuracy
That is a good question. I''ve tried of thinking of different reasons for it but so far I haven''t been able to come up with one. That is until I was working on some textures today.
It occured to me that the texturing needs to be taken into account for the distance and the width and height of the object in order to look correctly. I am assuming this is probably a same factor for many other things such as fogging.
My other ideas is that it maybe faster to deal with the matrix if you are doing things uniformly to the matrix. Since square matrices are used, many tricks can be used to increase performance.
I guess a really good test of both ideas would be to code something up where you do all work in software without ever using a 3D API. Although it will probably run slowly, you can at least test for the basic idea.