【问题标题】:three.js raycaster.intersectObject() returning same faceIndex every timethree.js raycaster.intersectObject() 每次返回相同的 faceIndex
【发布时间】:2015-09-03 18:50:06
【问题描述】:

我有一个用 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 和 unprojections 的 SO 帖子,这些帖子要么不起作用,要么我误解了它们。由于声誉,无法链接它们。

【问题讨论】:

  • 您可以随时在问题中添加链接,无论是否有声誉...
  • 不超过两个链接,没有代表超过零
  • 您不是在检查相等性,而是在 if 语句中进行赋值。
  • 那太尴尬了:/。实际上我经常犯这个错误,从现在开始我要格外警惕。已经解决了,谢谢!
  • @dlseanan 我今天学到了一些东西 :)

标签: javascript canvas three.js


【解决方案1】:

很可能应该是:

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

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2015-11-09
    • 2020-01-28
    • 1970-01-01
    相关资源
    最近更新 更多