
-----------------------------------
evildaddy911
Sun Apr 07, 2013 11:42 am

3d raycasting
-----------------------------------
I'm planning to make a 3d fps soon and i was planning to use raycasting for the bullets. however, the formulas i have come up with... dont seem to be working. can somebody point out where i went wrong?
Hidden text
d.x = A * sin(a.right)    // A is the hypotenuse of the triangle; a.right is the horizontal angle (0=z-axis, 90=y-axis)
d.y = B * sin(a.up)    //  a.up is the angle above the horizontal
Hidden text
1 = d.x^2 + d.y^2 + d.z^2    // 3d Pythagorean theorem, making the distance equal to 1 
Hidden text
d.z = B * cos(a.right) = A * cos(a.up)   // the bases of the 2 right triangles should both be equal to d.z, which is why i think there needs to be both A and B variables
d.z = A * cos(a.up) AND B = A * cos(a.right) / cos(a.up)   // express d.z in terms of A and rearrange the above formula to isolate B
Hidden text
subbing the other equations into the 3d Pythagorean theorem, we get:
1 = 
subbing in B=... we get:
1 = 
simplifying, we get:
1 = A^2 * sin(a*right)^2 + A^2 * 
common factoring out the A^2, we get:
1 = A^2 * 
dividing both sides by A^2, then raising both sides to the power of -0.5, we get:
A = 1 / root 
Hidden text
Then to get B, we just sub A into B = A * cos(a.right) / cos(a.up)
after that, we just sub the A and B values into our d.x=... ; d.y=... ; and d.x=... formulas. however, only about half of the values i've tested satisfy the 1 = d.x^2 + d.y^2 + d.z^2 equation. I've posted the results of the testing below. the result column is root (d.x^2 + d.y^2 + d.z^2), and should be very close to 1.

-----------------------------------
Dreadnought
Sun Apr 07, 2013 1:33 pm

Re: 3d raycasting
-----------------------------------
To be honest other than the 1's, none of the values are particularly close to 1.

d.z = B * cos(a.right) = A * cos(a.up)

This line is wrong, it should be
dz = A * cos(a.right) = B * cos(a.up)
Then we get
 B = A * cos(a.right) / cos(a.up)

This is only true if cos(a.up) is not 0, but since Turing doesn't return exactly zero for cos(pi) you're probably ok.

-----------------------------------
evildaddy911
Wed Apr 10, 2013 3:02 pm

RE:3d raycasting
-----------------------------------
excellant. thanks dreadnought! glad to know it was just a simple typo at the beginning!
