- /** return current cursor projected into 3D-space. The resulting ray
- * points from the cursor into the scene.
- * @param proj A projection matrix, e.g. generated with gluPerspective.
- * @param view A view matrix, e.g. generated with gluLookAt. The matrix
- * must have special layout described here:
- * {@link Matrix44d#getOrthonormalInverse getOrthonormalInverse} */
- public Ray getCursorRay(Matrix44d proj, Matrix44d view) {
- Vector2i viewport = WebGL.getInstance().getFramebufferSize();
- Vector2i revcur = viewport.sub(cursor);
- Vector3d v = new Vector3d(
- -(2*revcur.x/(double)viewport.x - 1.0) / proj._00,
- (2*revcur.y/(double)viewport.y - 1.0) / proj._11,
- -1
- );
- Matrix44d invView = view.getOrthonormalInverse();
- Ray ray = new Ray();
- ray.dir.x = v.x*invView._00 + v.y*invView._10 + v.z*invView._20;
- ray.dir.y = v.x*invView._01 + v.y*invView._11 + v.z*invView._21;
- ray.dir.z = v.x*invView._02 + v.y*invView._12 + v.z*invView._22;
- ray.dir.normalize();
- ray.origin = invView.getW();
- return ray;
- }