I know that similar questions has been answered earlier but you can't seem to get it right.
if have a plane at (0,0,-1) with a normal (0,0,1) and try to project two points
(-0.1f, +0.1f, -1.0f ), (+0.1f, -0.1f, -1.0f ) I would expect them to come out the same or maybe am I missing something? anyway I get (which can't be correct):
-0.14,0.7,-1
+0.14,0.7,-1
Here is my code for testing...
struct VECTOR{ float x, y, z;};VECTOR VecSub(VECTOR a, VECTOR b){ VECTOR v; v.x = a.x - b.x; v.y = a.y - b.y; v.z = a.z - b.z; return v;}VECTOR VecCross(VECTOR a, VECTOR b){ VECTOR v; v.x=a.y*b.z-a.z*b.y; v.y=a.z*b.x-a.x*b.z; v.z=a.x*b.y-a.y*b.x; return v;}VECTOR VecNormalize(VECTOR a){ float l = sqrtf(a.x * a.x + a.y * a.y + a.z * a.z); a.x /= l; a.y /= l; a.z /= l; return a;}int main(){ VECTOR p1 = { -0.1f, +0.1f, -1.0f }; VECTOR p2 = { +0.1f, -0.1f, -1.0f }; VECTOR n = { 0, 0, 1 }; VECTOR u, v; VECTOR p1d, p2d; u = VecSub(p2, p1); v = VecCross(u, n); u = VecNormalize(u); v = VecNormalize(v); printf("%0.5f %0.5f %0.5f\n", u.x, u.y, u.z); printf("%0.5f %0.5f %0.5f\n", v.x, v.y, v.z); printf("%0.5f %0.5f %0.5f\n", n.x, n.y, n.z); p1d.x = p1.x * u.x + p1.y * u.y + p1.z * u.z; p1d.y = p1.x * v.x + p1.y * v.y + p1.z * v.y; p1d.z = p1.x * n.x + p1.y * n.y + p1.z * n.z; p2d.x = p2.x * u.x + p2.y * u.y + p2.z * u.z; p2d.y = p2.x * v.x + p2.y * v.y + p2.z * v.y; p2d.z = p2.x * n.x + p2.y * n.y + p2.z * n.z; printf("\n"); printf("%0.5f, %0.5f %0.5f\n", p1d.x, p1d.y, p1d.z); printf("%0.5f, %0.5f %0.5f\n", p2d.x, p2d.y, p2d.z); return 0;}
Thanks in advance