{"_id":"3d-view-controls","_rev":"15-19c406eef9ce6c4364cb679194e631d0","name":"3d-view-controls","description":"A 3D camera with hooks for input handling","dist-tags":{"latest":"2.2.2"},"versions":{"1.0.0":{"name":"3d-view-controls","version":"1.0.0","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^1.0.0","mouse-wheel":"^1.0.2","right-now":"^1.0.0","mouse-change":"^1.1.1"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-simplicial-complex":"^3.0.2","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"961b071e31c7cfaf1fe333f899e8eb6ef5880511","_id":"3d-view-controls@1.0.0","_shasum":"e5fe7ec542290a52de67faed137369feba030a3f","_from":".","_npmVersion":"2.1.4","_nodeVersion":"0.10.26","_npmUser":{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"},"maintainers":[{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"dist":{"shasum":"e5fe7ec542290a52de67faed137369feba030a3f","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-1.0.0.tgz","integrity":"sha512-M6eF1HdYt0iRwefYg/uRv/EdwJxNiOpSNB22SHS4UmWu6prBMJ18QjRxatKhzHq5zL5/GX/5u4NkBOaprqDUCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0w1NpFf/fmCuKm0AXFDfJ07IYapG98YbISqI0bqmWAwIgDS1QgtoxsaxkvAHyqjSVMe9K2asVEutJ06ipevHO/VQ="}]}},"1.0.1":{"name":"3d-view-controls","version":"1.0.1","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^1.0.0","mouse-wheel":"^1.0.2","right-now":"^1.0.0","mouse-change":"^1.1.1"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-simplicial-complex":"^3.0.2","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"074016824a1c0603fe9e14cc694bc263d7056e29","_id":"3d-view-controls@1.0.1","_shasum":"0de1cbfc8d3f1c0df23a0b0d50fb29a2f103665e","_from":".","_npmVersion":"2.1.4","_nodeVersion":"0.10.26","_npmUser":{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"},"maintainers":[{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"dist":{"shasum":"0de1cbfc8d3f1c0df23a0b0d50fb29a2f103665e","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-1.0.1.tgz","integrity":"sha512-BS8IJ0FsDXYqKItl8RE3F8ttSBxll8dL6aktwjPmTCNomU0EvAmq0uV1qlVAXqODtFCJnsWvNNXNMpEJVG8ldA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPJBTZIfMT/590l9Ou7tlu3g+KpIYrsUonfVK/OanxlQIhANaVzGnC2+/NcEe7gi+lxrHBntcVbdAPHQ0obhmpaHMa"}]}},"2.0.0":{"name":"3d-view-controls","version":"2.0.0","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^2.0.0","mouse-wheel":"^1.0.2","right-now":"^1.0.0","mouse-change":"^1.1.1"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-simplicial-complex":"^3.0.2","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"6a294237abed92b6f29f390954ae5203796bd7f9","_id":"3d-view-controls@2.0.0","_shasum":"c1533668b356ca2bea5ac8ca25c4f9fe7b6813f0","_from":".","_npmVersion":"2.1.4","_nodeVersion":"0.10.26","_npmUser":{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"},"maintainers":[{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"dist":{"shasum":"c1533668b356ca2bea5ac8ca25c4f9fe7b6813f0","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.0.0.tgz","integrity":"sha512-yJJ015l26xKhZ64zTyX2ldhapFy5hPj6OKDm82DYACJ4rmH3SriDx29f0W+/9XO7AjyhzvbE9IhbE5t68B3J1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHa2rAlI54QZ6eYo2LfM54Xt16/0FWZfTUpAu9mGNhgQAiBNjCIrr3L85TM4n3FrbfapkMpXpXijfujNGaUT43KaQw=="}]}},"2.0.1":{"name":"3d-view-controls","version":"2.0.1","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^2.0.0","mouse-wheel":"^1.0.2","right-now":"^1.0.0","mouse-change":"^1.1.1"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-simplicial-complex":"^3.0.2","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"50e6562b75ef342cde0f0e5df0c99d06cde183d1","_id":"3d-view-controls@2.0.1","_shasum":"4c3cbe261a02203d243a8b5d2c0c394c82f7a676","_from":".","_npmVersion":"2.1.4","_nodeVersion":"0.10.26","_npmUser":{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"},"maintainers":[{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"dist":{"shasum":"4c3cbe261a02203d243a8b5d2c0c394c82f7a676","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.0.1.tgz","integrity":"sha512-zCP4EQkDekcmLUXbigI632p0pzqbhr3HTd5MbxrZ7yURKh+t25UCgGsBnBMmLUKpTl3NwWleVLFwFuSIyVQ8BA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFuGuCuc53Wr/8eikhfahgMNGcYZbZxUHUonNT2ZsNOdAiEAsZ9pEAyDU8ONys9fX6bRimr87CFkopdtdj6A0LblF9k="}]}},"2.1.0":{"name":"3d-view-controls","version":"2.1.0","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^2.0.0","mouse-wheel":"^1.0.2","right-now":"^1.0.0","mouse-change":"^1.1.1"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-simplicial-complex":"^3.0.2","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"4194c06092a19370cbfc943493ba9f11b41a14a1","_id":"3d-view-controls@2.1.0","_shasum":"4485164642f4767d92368bd4b8237c5442789ac3","_from":".","_npmVersion":"2.1.4","_nodeVersion":"0.10.26","_npmUser":{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"},"maintainers":[{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"dist":{"shasum":"4485164642f4767d92368bd4b8237c5442789ac3","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.1.0.tgz","integrity":"sha512-ah57ruecCyQvOqbT8jrGujVVh24ejor4CFhMUD0KrCM3odfdqtdZPYFykvClClNg3xngA+rV3pgZJwUv8z6Brw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDIgF4BNRlVZE6Mhjc2hZgMIq/GV9G94Cg+cStWhyxBoAiAXaXH0+BjWoffMS6l5/MVrln+JzcWiJNjVZKJgqscPbw=="}]}},"2.1.1":{"name":"3d-view-controls","version":"2.1.1","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^2.0.0","mouse-wheel":"^1.0.2","right-now":"^1.0.0","mouse-change":"^1.1.1"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-simplicial-complex":"^3.0.2","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"fbaa36de3d22cedb47f17ad77a87c417c8882d11","_id":"3d-view-controls@2.1.1","_shasum":"e76f432d97543e990ddc967e8f12c3ae104a7dba","_from":".","_npmVersion":"2.1.4","_nodeVersion":"0.10.26","_npmUser":{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"},"maintainers":[{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"dist":{"shasum":"e76f432d97543e990ddc967e8f12c3ae104a7dba","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.1.1.tgz","integrity":"sha512-t1BS5dbg879lYE0v3zbJ+zQv/qTpEtEsGvnyj37Aq+6t6xmtyeEZslSFHVGAiW6lT1n0c+w0ivZAalfAD0O82g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN/apbOBwGfApMQ5Cn/LqSw+5Wt9BzbgHsLQ4MepXZVQIgAetZzmSu5Q7aC78BGBk0WAilPLuE3o2MYXrI3BqUpY0="}]}},"2.2.0":{"name":"3d-view-controls","version":"2.2.0","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^2.0.0","mouse-change":"^1.1.1","mouse-event-offset":"^3.0.2","mouse-wheel":"^1.0.2","right-now":"^1.0.0"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-mesh3d":"^1.2.0","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"d04d428488fb274a1027292115ec0452b4b0486e","_id":"3d-view-controls@2.2.0","_shasum":"44aec9c448c27be34b3dd511ff9202ab6150dca5","_from":".","_npmVersion":"3.7.2","_nodeVersion":"6.2.0","_npmUser":{"name":"dfcreative","email":"df.creative@gmail.com"},"maintainers":[{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"dist":{"shasum":"44aec9c448c27be34b3dd511ff9202ab6150dca5","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.2.0.tgz","integrity":"sha512-bECeB3nhNNVG4swooIDP6paYYFdrU07Gjfj0T+jcPW5LOJYJvqoVWY38YnwStPc9n+dSNMwL2Ogh7ABwCrl2QQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0As/kvSIdpS4BuAPwwFVwMgiwkE0zdZo+9l96zKoixgIgBvZVGq5Re63SphEfoGJMYlS00JmJjZw/3WJC0nLpq3Y="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/3d-view-controls-2.2.0.tgz_1487750440395_0.5491890767589211"}},"2.2.1":{"name":"3d-view-controls","version":"2.2.1","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^2.0.0","has-passive-events":"^1.0.0","mouse-change":"^1.1.1","mouse-event-offset":"^3.0.2","mouse-wheel":"^1.0.2","right-now":"^1.0.0"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-mesh3d":"^1.2.0","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"4cee56b61d9f431efa27210fa3394c07503b9100","_id":"3d-view-controls@2.2.1","_npmVersion":"5.6.0","_nodeVersion":"8.1.2","_npmUser":{"name":"dfcreative","email":"df.creative@gmail.com"},"dist":{"integrity":"sha512-40N0dIHZ6UwdMdyvJxruX0/v34Mej8F/2UhEqgmSR68aZj8vre9onMB7yEbYjLMA2xYvFHvG7sZfzkYpJcVijA==","shasum":"30d6507117e4415bbd661a474da77000b85d803b","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.2.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCIHLmETWBnYIkBtLMIcDgv7kiVpX/M4B3tVCsLVOCEgIhAJxw6qKmLKbGzQ85ror+MaDPEGmMIUcgGJGYGrf8gY0L"}]},"maintainers":[{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/3d-view-controls-2.2.1.tgz_1517274281380_0.9146122557576746"}},"2.2.2":{"name":"3d-view-controls","version":"2.2.2","description":"A 3D camera with hooks for input handling","main":"camera.js","directories":{"example":"example"},"dependencies":{"3d-view":"^2.0.0","has-passive-events":"^1.0.0","mouse-change":"^1.1.1","mouse-event-offset":"^3.0.2","mouse-wheel":"^1.0.2","right-now":"^1.0.0"},"devDependencies":{"bunny":"^1.0.1","canvas-fit":"^1.2.0","gl-mesh3d":"^1.2.0","gl-mat4":"^1.1.2"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/mikolalysenko/3d-view-controls.git"},"keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"author":{"name":"Mikola Lysenko"},"license":"MIT","bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","gitHead":"0e59c2ae4a891ce3c7bb83aa4291f89d99366037","_id":"3d-view-controls@2.2.2","_npmVersion":"5.6.0","_nodeVersion":"8.1.2","_npmUser":{"name":"dfcreative","email":"df.creative@gmail.com"},"dist":{"integrity":"sha512-WL0u3PN41lEx/4qvKqV6bJlweUYoW18FXMshW/qHb41AVdZxDReLoJNGYsI7x6jf9bYelEF62BJPQmO7yEnG2w==","shasum":"7173fc197e9e7e4dbc63213438467047dbc84fa2","tarball":"https://registry.npmjs.org/3d-view-controls/-/3d-view-controls-2.2.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCe0xrYQQ1Qsx6eMrsBmc85HNjDOjiZHMJfDeksQ7El4gIgV5tJtwb2CU1XhMqzVEcx0J7mRV7L8LSdcW6XQp4Cpro="}]},"maintainers":[{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/3d-view-controls-2.2.2.tgz_1517274339829_0.5793584692291915"}}},"readme":"# 3d-view-controls\r\nAn easy to use 3D camera with input binding.\r\n\r\nDefault controls:\r\n\r\nButton | Interaction\r\n-------|------------\r\nLeft mouse | Rotate\r\nShift + left mouse *or* scroll horizontally | Roll\r\nRight mouse | Pan\r\nMiddle mouse *or* scroll vertically | Zoom\r\n\r\n# Example\r\n\r\nHere is a complete working example of how to use this module in an application:\r\n\r\n```javascript\r\nvar createCamera = require('3d-view-controls')\r\nvar bunny = require('bunny')\r\nvar perspective = require('gl-mat4/perspective')\r\nvar createMesh = require('gl-simplicial-complex')\r\n\r\nvar canvas = document.createElement('canvas')\r\ndocument.body.appendChild(canvas)\r\nwindow.addEventListener('resize', require('canvas-fit')(canvas))\r\n\r\nvar gl = canvas.getContext('webgl')\r\n\r\nvar camera = createCamera(canvas, {\r\n  eye:    [50,0,0],\r\n  center: [0,0,0],\r\n  zoomMax: 500\r\n})\r\n\r\nvar mesh = createMesh(gl, {\r\n  cells:      bunny.cells,\r\n  positions:  bunny.positions,\r\n  colormap:   'jet'\r\n})\r\n\r\nfunction render() {\r\n  requestAnimationFrame(render)\r\n  if(camera.tick()) {\r\n    gl.viewport(0, 0, canvas.width, canvas.height)\r\n    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)\r\n    gl.enable(gl.DEPTH_TEST)\r\n    mesh.draw({\r\n      projection: perspective([], Math.PI/4, canvas.width/canvas.height, 0.01, 1000),\r\n      view: camera.matrix\r\n    })\r\n  }\r\n}\r\nrender()\r\n```\r\n\r\n[You can try it out in your browser right now](https://mikolalysenko.github.io/3d-view-controls).\r\n\r\n# Install\r\n\r\n```\r\nnpm i 3d-view-controls\r\n```\r\n\r\n# API\r\n\r\n## Constructor\r\n\r\n#### `var camera = require('3d-view-controls')(element[, options])`\r\nCreates a new camera object.\r\n\r\n* `element` is a DOM node onto which this\r\n* `options` is an object with the following optional properties:\r\n    + `eye` - the position of the camera in world coordinates (Default `[0,0,10]`)\r\n    + `center` - the target of the camera in world coordinates (Default `[0,0,0]`)\r\n    + `up` - the up vector of the camera (Default `[0,1,0]`)\r\n    + `mode` - the interaction mode for the camera (Default `'orbit'`)\r\n    + `delay` - amount to delay interactions by for interpolation in ms (Default `16`)\r\n    + `rotateSpeed` - rotation scaling factor (Default `1`)\r\n    + `zoomSpeed` - zoom scaling factor (Default `1`)\r\n    + `translateSpeed` - translation/panning scale factor (Default `1`)\r\n    + `flipX` - flip X axis for rotations (Default `false`)\r\n    + `flipY` - flip Y axis for rotations (Default `false`)\r\n    + `zoomMin` - minimum zoom distance (Default `0.01`)\r\n    + `zoomMax` - maximum zoom distance (Default `Infinity`)\r\n\r\n## Geometric properties\r\n\r\nNote that you can update any property by assigning to it.  For example:\r\n\r\n```javascript\r\ncamera.eye = [100, 100, 100]\r\n\r\ncamera.matrix = [\r\n  1, 0, 0, 0,\r\n  0, 1, 0, 0,\r\n  0, 0, 1, 0,\r\n  0, 0, 0, 1]\r\n```\r\n\r\n#### `camera.matrix`\r\nA 4x4 matrix encoded as a length 16 array representing the homogeneous transformation from world coordinates to view (camera) coordinates.\r\n\r\n#### `camera.mode`\r\nThe current interaction mode for the camera.  Possible values include:\r\n\r\n* `orbit` - free orbiting mode\r\n* `turntable` - behaves like a turntable/gimbal\r\n* `matrix` - manual matrix control\r\n\r\n#### `camera.eye`\r\nThe position of the camera in world coordinates\r\n\r\n#### `camera.up`\r\nA vector pointing up in world coordinates\r\n\r\n#### `camera.center`\r\nThe target of the camera in world coordinates\r\n\r\n#### `camera.distance`\r\nEuclidean distance from `eye` to `center`\r\n\r\n## Methods\r\n\r\n#### `camera.tick()`\r\nUpdates the camera state.  Call this before each frame is rendered to compute the current state of the camera.\r\n\r\n**Returns** `true` if the state of the camera has changed since the last call to `tick`\r\n\r\n#### `camera.lookAt(center, eye, up)`\r\nSets the camera center/eye/up vector to look at a fixed target\r\n\r\n* `center` is the new center/target for the camera\r\n* `eye` is the position of the camera in world coordinates\r\n* `up` is a vector pointing up\r\n\r\n#### `camera.rotate(yaw, pitch, roll)`\r\nApplies an incremental rotation to the camera\r\n\r\n* `yaw` is the amount to rotate about the y-axis (in xz plane of camera)\r\n* `pitch` is the amount to rotate about the x-axis (in yz plane of camera)\r\n* `roll` is the amount to rotate about the forward axis (in xy plane of camera)\r\n\r\n#### `camera.pan(dx, dy, dz)`\r\nApplies a relative motion to the camera, moving in view coordinates\r\n\r\n* `dx,dy,dz` are the components of the camera motion vector\r\n\r\n#### `camera.translate(dx, dy, dz)`\r\nTranslates the camera in world coordinates\r\n\r\n* `dx,dy,dz` are the components of the translation vector\r\n\r\n## Tuning parameters\r\n\r\n#### `camera.distanceLimits`\r\nA 2D array representing the `[lo,hi]` bounds on the zoom distance.  Note that `0 < lo < hi`.\r\n\r\n#### `camera.flipX`\r\nA flag controlling whether the camera rotation is flipped along the x-axis\r\n\r\n#### `camera.flipY`\r\nA flag controlling whether the camera rotation is flipped along the y-axis\r\n\r\n#### `camera.delay`\r\nThe amount of delay on the interpolation of the camera state in ms\r\n\r\n#### `camera.rotateSpeed`\r\nCamera rotation speed scaling factor\r\n\r\n#### `camera.zoomSpeed`\r\nCamera zoom speed scaling factor\r\n\r\n#### `camera.translateSpeed`\r\nCamera translation speed scaling factor\r\n\r\n#### `camera.element`\r\nThe DOM element the camera is attached to\r\n\r\n# Future\r\n\r\nExpand to support more input types:\r\n\r\n* Touch\r\n* Keyboard\r\n* GamePad\r\n* VR?\r\n\r\n# License\r\n(c) 2015 Mikola Lysenko. MIT License","maintainers":[{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"mikolalysenko","email":"mikolalysenko@gmail.com"}],"time":{"modified":"2022-06-12T14:07:22.220Z","created":"2015-02-18T18:14:47.330Z","1.0.0":"2015-02-18T18:14:47.330Z","1.0.1":"2015-02-18T18:40:30.684Z","2.0.0":"2015-04-04T18:54:25.976Z","2.0.1":"2015-04-06T21:42:28.714Z","2.1.0":"2015-04-07T21:08:08.717Z","2.1.1":"2015-04-09T21:35:16.634Z","2.2.0":"2017-02-22T08:00:42.213Z","2.2.1":"2018-01-30T01:04:41.452Z","2.2.2":"2018-01-30T01:05:39.898Z"},"homepage":"https://github.com/mikolalysenko/3d-view-controls","keywords":["camera","webgl","3d","input","handling","view","orbit","turntable","matrix","graphics","stackgl","gl"],"repository":{"type":"git","url":"git+https://github.com/mikolalysenko/3d-view-controls.git"},"author":{"name":"Mikola Lysenko"},"bugs":{"url":"https://github.com/mikolalysenko/3d-view-controls/issues"},"license":"MIT","readmeFilename":"README.md"}