无法在 THREE.js 中获取全局 'camera' 变量的值

Trouble getting the value of global 'camera' variable in THREE.js

我的场景中包含一个 THREE.js 相机对象:

camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 10000 );
camera.position.z = 6;
camera.position.y = 6;

效果很好。

我正在尝试在用户与场景交互时实时获取 camera.position.y 属性。

var milkyWay = document.getElementById("chap3content");

var trackAngle = function() {
    var camAngle = window.camera.position.y;
    console.log(camAngle);
    return camAngle;
}


milkyWay.onmousedown = function() { 
  console.log("mouse pressed");
  document.addEventListener("mousemove", trackAngle);
  if (camAngle <= 0.25) {
      console.log("SHOW ME THE MONEY");
    }
}

milkyWay.onmouseup = function() {   
    console.log("mouse released");
    document.removeEventListener("mousemove", trackAngle);
}

上面的函数按预期工作,每次鼠标按下并在场景中移动时,都会将 camera.position.y 的值打印到控制台日志中。我遇到的问题是当我在 'if' 条件中引用 camAngle 变量时,控制台日志抛出一条错误,指出找不到 camAngle。

什么给了?很长一段时间以来,我一直在努力解决这个问题,并且变得很沮丧。我需要 camera.position.y 的值才能在 DOM 上显示其他内容供用户交互。更改为 window.camera.position.y 也没有区别:(

变量 camAngle 超出了 milkyWay.onmousedown

的范围

这是标准的 javascript 概念,您可以通过搜索 post 来了解,例如 this one

这里最简单的解决方案是将 camAngle 提升到全局范围。只需:

var camAngle;

在脚本的顶部,不要在函数中重新声明它。