javascript - Three.js raycaster.intersectObject() 每次都返回相同的faceIndex

标签 javascript canvas three.js

我有一个用 THREE.CanvasRenderer() 渲染的 3D 立方体,我试图根据双击立方体的哪一面来打开特定的网页。但是,无论单击哪个面,都会打开相同的页面。一些黑客调试(我不知道如何使用控制台)显示 intersects[ 0 ].faceIndex 始终为“11”。我怎样才能让它返回立方体最近的面。

这是我的 js 中处理这个问题的部分;

document.addEventListener('dblclick', onDocumentMouseDblClick, false);

function onDocumentMouseDblClick(event) {

    event.preventDefault();

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

    raycaster.setFromCamera(mouse, camera);

    var intersects = raycaster.intersectObject(cube);

    if (intersects.length > 0) {
      if (intersects[0].faceIndex = 1 || 2) {
        window.open("About.html", "_self")
          //title.innerHTML = intersects[ 0 ].faceIndex;
      }
      if (intersects[0].faceIndex = 3 || 4) {
        window.open("Mondrian.html", "_self")
          //title.innerHTML = intersects[ 0 ].faceIndex;
      }
      if (intersects[0].faceIndex = 5 || 6) {
        window.open("page3.html", "_self")
          //title.innerHTML = intersects[ 0 ].faceIndex;
      }
      if (intersects[0].faceIndex = 7 || 8) {
        window.open("page4.html", "_self")
          //title.innerHTML = intersects[ 0 ].faceIndex;
      }
      if (intersects[0].faceIndex = 9 || 10) {
        window.open("page5.html", "_self")
          //title.innerHTML = intersects[ 0 ].faceIndex;
      }
      if (intersects[0].faceIndex = 11 || 12) {
        window.open("page6.html", "_self")
          //title.innerHTML = intersects[ 0 ].faceIndex;
      }

我首先关注 THREE.js interactive cubes example并阅读 THREE.raycaster documentation表明交叉点应按最近距离排序。我读过一些使用 Vector3 和非投影的 SO 帖子,它们要么不起作用,要么我误解了它们。由于声誉,无法链接它们。

最佳答案

最有可能应该是:

if (intersects[0].faceIndex === 1 || intersects[0].faceIndex === 2) {

关于javascript - Three.js raycaster.intersectObject() 每次都返回相同的faceIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383304/

相关文章:

javascript - 使用 lodash 查找深度重复值的对象键

javascript - HTML Div 转换为带背景图像的图像 Html2canvas

javascript - 如何在 window 8 metro 应用程序中将 html5 canvas 保存为图像文件?

javascript - 移动 HTML5 Canvas 元素

fonts - 三JS : Converting fonts from otf and ttf to json

javascript - 在运行时更新使用 Three.js 创建的 3D 圆柱体的高度/半径

javascript - 单选按钮数组

javascript - Angular 表单 - 如何在表单无效时禁用 onSubmit 事件?

android - 如何在delphi firemonkey和android上使用抗锯齿

javascript - Three.js 中的光照贴图