threejs对象拾取
来源:互联网 发布:java 内存泄露常见场景 编辑:程序博客网 时间:2024/05/16 12:50
对象拾取
对象拾取也就是要获得鼠标事件发生位置的图形对象。在threejs中,是通过Raycaster 对象来拾取对象的,ray是射线,caster是投射器,从字面上即可理解其工作原理是:从某个方向发射一条射线,穿过鼠标所在的点,则这条射线经过的对象就是鼠标点击的对象。示例如下:
let raycaster = new THREE.Raycaster();let mouse = new THREE.Vector2();function pickupObjects(e){ //将鼠标点击位置的屏幕坐标转成threejs中的标准坐标 mouse.x = (e.clientX/window.innerWidth)*2 -1; mouse.y = -(e.clientY/window.innerHeight)*2 + 1; //从相机发射一条射线,经过鼠标点击位置 raycaster.setFromCamera(mouse,camera); //计算射线相机到的对象,可能有多个对象,因此返回的是一个数组,按离相机远近排列 let intersects = raycaster.intersectObjects(scene.children); for ( var i = 0; i < intersects.length; i++ ) { intersects[ i ].object.material.color.set( 0x00ff00 ); }}
下面分析一下例子的代码,先看看鼠标点击位置的坐标转换:
mouse.x = (e.clientX/window.innerWidth)*2 -1;mouse.y = -(e.clientY/window.innerHeight)*2 + 1;
为什么这样就能得到threejs的标准坐标?下面是我写的一个推导过程:
把上面的x1换成e.clientX,把y1换成e.clientY,就可以得到例子中的式子了。所以,当threejs的屏幕宽度并不是window.innerWidth时,也要记得根据实际从新推导。
其它并不复杂,可以参考一下Raycaster对象的文档,看看这些方法的说明。
0 0
- threejs对象拾取
- threejs设置对象层次
- 对象拾取 【转】
- OPENGL对象拾取
- osg中拾取对象和拾取点
- threejs指定对象旋转中心
- threejs
- 通过点击对象拾取对象方法详解
- 拾取
- 3D对象鼠标像素拾取解决方案
- 8、osg中拾取模型对象
- Threejs 官网 - 不可见对象(Invisible objects)
- 通过渲染到浮点纹理实现三维对象拾取
- 通过渲染到浮点纹理实现三维对象拾取
- 通过渲染到浮点纹理实现三维对象拾取
- 通过渲染到浮点纹理实现三维对象拾取
- 201710102000->利用ngui拾取手指滑动的对象
- threejs截屏
- 心情很不好啊
- CentOS中修改默认runlevel
- 169. Majority Element Easy
- 原码、反码与补码
- 买糖果
- threejs对象拾取
- 设计模式(工厂方法)
- 关于为啥要开博客
- PHP及其微信公众号开发(学习之路三)
- 【Nginx 配置】 SSI
- 【蓝桥杯】算法提高 夺宝奇兵
- 当position=static(默认)时,offset()和position()并不一样
- listview多条目类型适配
- EJB事务管理