Post-divide it is indeed planar, but that doesn’t count.
GL’s definition of ‘planar’ is not limited to screen space x/y/z. It applies to clip space and it includes colors, textures and all other vertex attributes.
Besides, texture ‘distortion’ is exactly what can be expected with your quad. Interpolated w/q controls texture mapping, not q alone. For your quad to look ‘right’, you’d have to fiddle with the vertex coords too to compensate.
And last but not least ‘depth-based perspective distortions’ are solved by virtue of transforming everything to homogenous coords. Look at how a perspective projection matrix is composed and you’ll see that for every unit in z, you get some amount in w. A projection that doesn’t touch w is ortographic and this obviously won’t correct perspective distortions on textures. So it’s not really depth-based, it’s w based.
Ie
//orthographic projection
glTexCoord2f(0.0f,1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glTexCoord2f(0.0f,0.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glTexCoord2f(1.0f,0.5f);
glVertex3f( 0.2f, 0.0f,-5.0f);
!=
//perspective projection
glTexCoord2f(0.0f,1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glTexCoord2f(0.0f,0.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glTexCoord2f(1.0f,0.5f);
glVertex3f( 1.0f, 0.0f,-5.0f);
To get the same result in ortho mode, you need this
//ortho projection
glTexCoord2f(0.0f,1.0f);
glVertex4f(-1.0f, 1.0f,-1.0f,1.0f);
glTexCoord2f(0.0f,0.0f);
glVertex4f(-1.0f,-1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,0.5f);
glVertex4f( 1.0f, 0.0f,-5.0f,5.0f);
[This message has been edited by zeckensack (edited 02-10-2003).]