javascript - 通过正交相机交叉

标签 javascript three.js

我在我的项目中使用正交相机。我的问题是光线转换器。它正在工作,但不正确。对象不会在其所有宽度或高度上拾取。有时它只适用于对象的一半。但是当我通过轨道控制移动相机时,raycaster 可以正常工作。忘了说我用的是GPUpicker库

我的项目:https://alovert.ru

默认情况下相机是透视的,要将其切换为正交,请按键盘上的“O”。

要查看问题,您必须单击立方体的边和梁的小边。这样,您就向场景中添加了一个新对象。当您尝试添加新对象时,您会看到对象的某些部分在您移动相机之前没有相交。使用透视相机可以正常工作。感谢您的帮助! enter image description here


我的代码交集

function onMouseClick(e) {
  e.preventDefault();

  mouse.x = e.clientX;
  mouse.y = e.clientY;
  var raymouse = new THREE.Vector2();
  raymouse.x = ((event.clientX - renderer.domElement.offsetLeft) / renderer.domElement.width) * 2 - 1;
  raymouse.y = - ((event.clientY - renderer.domElement.offsetTop) / renderer.domElement.height) * 2 + 1;

  raycaster.setFromCamera(raymouse, activeCamera);

  var intersect = gpuPicker.pick(mouse, raycaster);
}

最佳答案

请看这个例子: https://threejs.org/examples/#webgl_interactive_cubes_ortho

代码: https://github.com/mrdoob/three.js/blob/master/examples/webgl_interactive_cubes_ortho.html

试试这个:


var camera = new THREE.OrthographicCamera(0, window.innerWidth, -window.innerHeight, 0, -100, 100);

var raycaster = new THREE.Raycaster(); // create once
var mouse = new THREE.Vector2(); // create once

...

mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;

raycaster.setFromCamera( mouse, camera );

var intersects = raycaster.intersectObjects( objects, recursiveFlag );

关于javascript - 通过正交相机交叉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56232754/

相关文章:

javascript - 三个js围绕球体旋转物体

javascript - 阴影在 (THREE.js r82) 中不可见

javascript - jQuery - 选择框上的取消选择选项不能正常工作

Javascript insideHTML 不写入文档

javascript - three.js-为什么它不在对象上应用纹理

three.js - Phong ShaderMaterial 参数/设置定义

angular - 仅在 Safari 上的 Angular ThreeJS 应用程序中的 ChunkLoadError

javascript - 返回每个可能的正则表达式结果,而不仅仅是第一个

javascript - 使用 session Javascript 存储数据

javascript - 使用 javascript 获取 cookie