camera-picking-ray
Creates a picking ray for a camera. Commonly used for mouse interaction in 2D and 3D games.
The camera is assumed to have a projection
and view
matrix, which can be combined and inverted to form invProjView
.
var origin = 0 0 0var direction = 0 0 0 //compute ray and store it in (origin, direction) console
Full example, hit-testing against a 3D sphere:
var mat4 = var pick = var intersect = //your camera matricesvar projection = ...var view = ...var projView = mat4var invProjView = mat4 var mouse = screenX screenHeight - screenY var viewport = 0 0 screenWidth screenHeight var ray = ro: 0 0 0 rd: 0 0 0 //store result in ray (origin, direction) //let's see if the mouse hit a 3D sphere...var center = 0 0 0 radius = 15var hit = if hit console
PRs welcome.
Usage
pick(origin, direction, mouse, viewport, invProjView)
Creates a picking ray for the given mouse
screen-space position (vec2) and viewport
screen-space bounds (x, y, width, height). invProjView
is the inverse of the combined projection * view
matrix for your camera.
Stores the resulting ray in the first two parameters: origin
(vec3) and direction
(vec3).
See Also
License
MIT, see LICENSE.md for details.