javascript - camera.lookAt() 的逆

标签 javascript camera three.js

我在谷歌上进行了广泛的搜索,但我还没有找到我认为实际上很常见的情况的解决方案。假设我有一个THREE.PerspectiveCamera初始化为查看空间中的某个点:

var camera = new THREE.PerspectiveCamera(45, 2, 0.1, 100);
var target = new THREE.Vector3(1, 2, 3);
camera.lookAt(target);

现在,稍后在代码中我希望能够找到 target 的坐标只需查询 camera .
我尝试了 this question 中的建议,根据我自己的场景进行调整:

var vector = new THREE.Vector3();
vector.applyQuaternion(camera.quaternion);
console.log(vector);

但它记录了一个坐标向量 (0, 0, 0)而不是正确的坐标(在我的示例中,应该是 (1, 2, 3) )。
有什么见解吗?干杯。

编辑:
好吧,我将尝试在这里结合上下文,以证明为什么 MrTrustworthy 的解决方案不幸地不适用于我的场景。我正在尝试调整 THREE.OrbitControls出于我的目的,我注意到在使用它时,它会覆盖相机最初看到的任何位置。这也已被报道here 。基本上,在OrbitControls.js的第36行(我正在使用可以找到的版本 here ) this.target初始化为new THREE.Vector3() ;我发现,如果我手动将其设置为等于我用作 camera.lookAt() 参数的相同向量一切都工作得很好:我可以从同一个 POV 开始平移、绕轨道运行和缩放场景,如果我不应用控件,我就会看到场景。当然,我无法将这些信息硬编码到 OrbitControls.js 中。因为每次我想改变相机的初始“lookAt”时,它都需要我改变它;如果我要遵循 MrTrustworthy 的建议,我将不得不更改 OrbitControls.js 的第 36 行像这样阅读:this.target = object.targetRef (或 this.target = object.targetRef || new THREE.Vecotr3() ),这也太“固执己见”(它总是要求 object 具有 targetRef 属性,而我试图坚持仅使用 Three.js 的现有对象属性和方法)。希望这有助于更好地了解我的案例。干杯。

最佳答案

如果您唯一的用例是“我希望能够通过相机对象访问相机目标位置”,您可以将引用放入相机对象中。

var camera = new THREE.PerspectiveCamera(45, 2, 0.1, 100);
var target = new THREE.Vector3(1, 2, 3);
camera.lookAt(target);
camera.targetRef = target;

//access it
var iNeedThisNow = camera.targetRef;

关于javascript - camera.lookAt() 的逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26557252/

相关文章:

iphone - 从 UIImagePickerController SourceType 相机获取全高清图像,无需单击捕获按钮

javascript - 在 Three.js 中对地形进行分层纹理

javascript - 创建一个脚本来增加网站上的数字

javascript - 如何正确制作此动画?

javascript - Chrome 上不一致/延迟的 HTML5 桌面推送通知

javascript - THREE.js 从 child 相机到场景的光线转换

javascript - 弹出项目后的 Angular-cli.json

java - 如何让相机沿着旋转方向移动?

webgl - 将夜灯添加到 WebGL/Three.js 地球

javascript - Threejs TubeGeometry : Applying custom curve causes unexpected twisting