Skip to main content
GameDev.net gamedev.net
🔒 Locked

Ray-cast onto plane

Started by Craig_jb Oct 21, 2010 at 1:34 AM 0 replies 900+ views
Original Post
Craig_jb
Craig_jb
I need to cast a ray from the position of a user's touch on a iOS device onto a plane on the XZ axis in OpenGL ES. I have code to build the ray points from the touch position and viewport size, and code to generate the inverse view*proj. Also, I have some code to calculate the position on the plane where it does intersect, but that part isn't working so well. Any help with it is much appreciated!

CGPoint p = [[touches anyObject] locationInView:self.view];        cml::vector4f r1(p.x / windowSize.width / windowSize.height, p.y, 0.0f, 1.0f);        cml::vector4f r2(p.x / windowSize.width, p.y / windowSize.height, 1.0f, 1.0f);                // unproject the ray points        cml::matrix44f_c invViewProj = orbitCam.viewMat * ((OpenGLView*)self.view).projMat;        invViewProj = cml::inverse(invViewProj);                r1 = invViewProj * r1;        r2 = invViewProj * r2;                cml::vector3f R1(r1[0], r1[1], r1[2]);        cml::vector3f R2(r2[0], r2[1], r2[2]);        cml::vector3f dir = cml::normalize(R2 - R1);                cml::vector3f V1(1.0f, 0.0f, 0.0f);        cml::vector3f V2(0.0f, 0.0f, 1.0f);        cml::vector3f V3 = cml::cross(V1, V2);                cml::vector3f vRotRay1(cml::dot(V1, R1 - V1), cml::dot(V2, R1 - V1), cml::dot(V3, R1 - V1));        cml::vector3f vRotRay2(cml::dot(V1, R2 - V1), cml::dot(V2, R2 - V1), cml::dot(V3, R2 - V1));                float percent = vRotRay1[2] / (vRotRay2[2] - vRotRay1[2]);        cml::vector3f intersect = vRotRay1 + (vRotRay1 - vRotRay2) * percent;

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.