void gpuPSApp::computeAttractorPosition() { // The attractor is positioned at the intersection of a ray // from the mouse to a plane perpendicular to the camera. float t = 0; Vec3f right, up; mMayaCam.getCamera().getBillboardVectors(&right, &up); CameraPersp cam = mMayaCam.getCamera(); float u = mMousePos.x / (float) getWindowWidth(); float v = mMousePos.y / (float) getWindowHeight(); Ray ray = cam.generateRay(u , 1.0f - v, cam.getAspectRatio() ); if (ray.calcPlaneIntersection(Vec3f(0.0f,0.0f,0.0f), right.cross(up), &t)) { mAttractor.set(ray.calcPosition(t)); } }
void RodSoundApp::mouseDrag(MouseEvent event) { if (!running) return; Vec2i mouse = event.getPos(); Vec2i windowSize = getWindowSize(); Ray r = cam.generateRay((real)mouse.x/windowSize.x, 1.0 - (real)mouse.y/windowSize.y, getWindowAspectRatio()); float t; if(!r.calcPlaneIntersection(targetPos, targetPos-eyePos, &t)) { std::cerr << "Mouse ray did not intersect plane!\n"; } mousePosition = r.calcPosition(t); }