I just did a small test, and adding a center vertex really does not fix the problem, it only makes it a bit smaller. Check the attached image.
I've also been reading on perspective correction, and it really needs you to provide Z information to the video card, so it can use it while interpolating the UV coords.
It seems the only ways to get around such problem are either using a software renderer with quad-based rendering, or "guessing" Z values for the quad's vertices. In theory, it's not really that hard to come up with values that produce passable results, by comparing the length of the quad's axis and maybe the diagonals, but it could get expensive. The problem is that it would propably not work properly with concave quads (but splitting the quad in two triangles already has 50% odds of messing with those already).
Well, thanks for aswering my question 🙂
--EDIT--
in the attached image, in order:
1) quad split into two triangles (same Z value for all vertices), 2) HW perspectively correct plane (correct Z values for each vertex), 3) quad split into four triangles (same z value for all vertices)
I've also been reading on perspective correction, and it really needs you to provide Z information to the video card, so it can use it while interpolating the UV coords.
It seems the only ways to get around such problem are either using a software renderer with quad-based rendering, or "guessing" Z values for the quad's vertices. In theory, it's not really that hard to come up with values that produce passable results, by comparing the length of the quad's axis and maybe the diagonals, but it could get expensive. The problem is that it would propably not work properly with concave quads (but splitting the quad in two triangles already has 50% odds of messing with those already).
Well, thanks for aswering my question 🙂
--EDIT--
in the attached image, in order:
1) quad split into two triangles (same Z value for all vertices), 2) HW perspectively correct plane (correct Z values for each vertex), 3) quad split into four triangles (same z value for all vertices)