相关疑难解决方法(0)

Three.js投影仪和Ray对象

我一直在尝试使用Projector和Ray类来进行一些碰撞检测演示.我已经开始尝试使用鼠标选择对象或拖动它们.我已经查看了使用这些对象的示例,但是它们似乎没有任何评论可以解释投影仪和Ray正在做什么的一些方法.我有几个问题,我希望有人能回答这些问题.

究竟发生了什么,Projector.projectVector()和Projector.unprojectVector()有什么区别?我注意到,在使用投影仪和光线对象的所有示例中,似乎在创建光线之前调用了unproject方法.你什么时候使用projectVector?

我在此演示中使用以下代码在使用鼠标拖动时旋转立方体.当我用mouse3D和相机取消投影然后创建Ray时,有人能用简单的术语解释究竟发生了什么.光线是否依赖于对unprojectVector()的调用

/** Event fired when the mouse button is pressed down */
function onDocumentMouseDown(event) {
    event.preventDefault();
    mouseDown = true;
    mouse3D.x = mouse2D.x = mouseDown2D.x = (event.clientX / window.innerWidth) * 2 - 1;
    mouse3D.y = mouse2D.y = mouseDown2D.y = -(event.clientY / window.innerHeight) * 2 + 1;
    mouse3D.z = 0.5;

    /** Project from camera through the mouse and create a ray */
    projector.unprojectVector(mouse3D, camera);
    var ray = new THREE.Ray(camera.position, mouse3D.subSelf(camera.position).normalize());
    var intersects = ray.intersectObject(crateMesh); // …
Run Code Online (Sandbox Code Playgroud)

javascript 3d three.js

38
推荐指数
3
解决办法
3万
查看次数

检测THREE.js中的点击对象

我有一个THREE.js场景,其中出现了很多元素,我需要检测用户点击的对象.

到目前为止我所做的是以下内容.相机不会移动太多 - 它只会将垂直位置改变一个有限的数量,始终朝向同一点.我的近似方法如下:

  • 如果相对于画布的点击,我会获取坐标
  • 我通过简单的重新缩放将它们转换为webGL场景中的水平和垂直坐标,并添加一个足够远的Z坐标.
  • 我从上面的点开始采用水平射线,由THREE.Ray()构建
  • 我使用ray.intersectObjects()来查找沿光线的第一个元素.

这种方法大致有效,但有时距离实际点几个像素.

是否有更可靠的技术来找出用户点击的对象?

javascript three.js

25
推荐指数
1
解决办法
4万
查看次数

标签 统计

javascript ×2

three.js ×2

3d ×1