mcmonkey 113 Report post Posted February 20, 2013 (edited) Let's say I have two triangles in a 3D space The triangles are, of course, made from 3 coordinates (each coordinate an X/Y/Z set) First Triangle: X1 = 0, Y1 = 0, Z1 = Dynamic X2 = 1, Y2 = 0, Z2 = Dynamic X3 = 1, Y3 = 1, Z3 = Dynamic Second Triangle: X1 = 0, Y1 = 0, Z1 = Dynamic X2 = 1, Y2 = 1, Z2 = Dynamic X3 = 1, Y3 = 0, Z3 = Dynamic ... So, basically, a square that's cut through the middle (and bends on that cut) Each Z value for each is known, but varies from instance to instance. And they vary independently. If I have a position (Say, X=0.13,Y=0.73) How would I calculcate what the Z of the triangle will be at that position? (I'm hoping for an equation or pseudocode that will calculate the value without using raytracing or any expensive functions like that) Edited February 21, 2013 by mcmonkey 0 Share this post Link to post Share on other sites
HappyCoder 5054 Report post Posted February 20, 2013 (edited) If the two triangles always lie on the same plane then you can calculate the plane the triangles lay on.The equation for a plane isAx + By + Cz + D = 0; <A, B, C> is the normal of the plane and D is the closest distance of the plane to the origin divided by the length of the normal. To calculate a plane from a triangle.// the A, B, and C of the planenormal = cross(P_{2} - P_{1}, P_{3} - P_{1})d = -dot(P_{1}, normal) // you can dot the normal with any of the points in the triangle, it will yield the same dwhere cross() is the cross product, dot() is the product, and P_{n} is a point on the triangleThen use the equation of the plane to solve for x, y, or z when you have the other two. For example, to solve for zAx + By + Cz + D = 0 Cz = -Ax - By - D z = -(Ax + By + D) / C This will find the point on the same plane the point can lie on the outside of the triangles, so you will have to make sure you point lies inside the triangle. If you need help with that I can post a method for that, I just don't want to crowd up this post if you already have a way to do that.This actually is the basics of how a ray tracer works. Casting an individual ray is actually quite fast. Ray tracing entire images however is costly because there are many rays being cast per pixel. Some rays are used to calculate shadows, others reflections, and other such things and the scenes are usually fairly complex. You should be able to cast dozens of rays in a simpler scene and still maintain a responsive frame rate. So unless you find your game isn't running fast enough and you have identified your "ray casting" as the bottleneck, I wouldn't spend much time making sure it is fast. Edited February 20, 2013 by HappyCoder 0 Share this post Link to post Share on other sites
el junk 191 Report post Posted February 20, 2013 Two edges of a given triangle span the plane containing that triangle. So you could try looking at what you want to calculate as a linear combination of these basis vectors and solve it that way. Because of the particular X, Y components of your triangle vertices, this might actually be cheap: b(1,1) - b(1,0) + a(1,0) = (a,b). Another way is to compute the plane equation: Ax + By + Cz = D and then solve for z. The (X, Y) you gave is in either of the spanned planes, but not on either triangle, since it has a large Y component. I'm not sure if that was intentional. 0 Share this post Link to post Share on other sites