热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

三。js设置并读取相机的lookvector-three.jssetandreadcameralookvector

Insteadofrotatingthecamerawithcamera.rotationorwiththelookAt()functionIdliketopassa

Instead of rotating the camera with camera.rotation or with the lookAt() function I'd like to pass a look vector directly to the camera... Is it possible to set a camera look vector directly and is it possible to read the look vector from the camera?

而不是用照相机旋转照相机。旋转或使用lookAt()函数,我想将一个look矢量直接传递给相机……是否可以直接设置摄像头的视向量,是否可以从摄像头中读出视向量?

4 个解决方案

#1


25  

The camera does not have a "look vector", so you cannot set it.

相机没有“look vector”,所以你不能设置它。

You can, however, construct a point to look at by adding your look vector to the camera's position, and then call

但是,你可以通过在相机的位置添加你的外观向量来构造一个点,然后调用。

camera.lookAt( point );

Here is how to determine the direction in which the camera is looking -- assuming the camera either has no parent (other than the scene).

这里是如何确定相机的方向——假设相机没有父(除了场景)。

The camera is looking down it's internal negative z-axis, so create a vector pointing down the negative z-axis:

相机向下看它的内部负z轴,所以创建一个指向负z轴的矢量:

var vector = new THREE.Vector3( 0, 0, - 1 );

Now, apply the same rotation to the vector that is applied to the camera:

现在,将同样的旋转应用到相机上的矢量:

vector.applyQuaternion( camera.quaternion );

The resulting vector will be pointing in the direction that the camera is looking.

由此产生的矢量将指向相机的方向。

Alternatively, you can use the following method, which works even if the camera is a child of another object:

或者,您也可以使用以下方法,即使相机是另一个对象的子对象,也可以使用以下方法:

camera.getWorldDirection( dirVector );

three.js r.73

三。js r.73

#2


8  

The above answer wrapped as a util, this is what I do with my Three Utils:

上面的答案是一个util,这是我用我的3个util做的:

THREE.Utils = {
    cameraLookDir: function(camera) {
        var vector = new THREE.Vector3(0, 0, -1);
        vector.applyEuler(camera.rotation, camera.eulerOrder);
        return vector;
    }
};

Call it with THREE.Utils.cameraLookDir(camera);

叫它与THREE.Utils.cameraLookDir(相机);

#3


5  

These other answers are very insightful, but not completely correct. The code returns a vector that points in the same direction that the camera is pointing at. That's a great start!

这些其他的答案很有见地,但并不完全正确。代码返回一个指向摄像机指向的方向的向量。这是一个好的开始!

But unless the camera is at the origin (0, 0, 0) (or lies exactly on the line segment that connects the origin to the rotated vector point without passing beyond that point so that the point is behind the camera) the camera won't be looking at that point. Clearly -- just common sense -- the position of the camera also influences what points are being looked at. Just think about it!!

但是,除非相机在原点(0,0,0)(或者正好位于将原点与旋转矢量点相连的线段上,而不经过那个点,这样这个点就在相机后面),否则相机不会看到那个点。很明显,仅仅是常识,相机的位置也会影响到所观察到的点。想想吧! !

The camera method lookAt() looks at a point in 3D space regardless of where the camera is. So to get a point that the camera is looking at you need to adjust for the camera position by calling:

camera方法lookAt()查看3D空间中的一个点,而不管摄像头在哪里。因此,要得到相机正在观察的点,你需要通过调用:

vec.add( camera.position );

矢量。添加(相机。位置);

It is also worth mentioning that the camera is looking not at a single point but is looking down a line of an infinite number of points, each at a different distance from the camera. The code from the other answers returns a vector that is exactly one unit in length because the application of a quaternion to the normalized z-axis vector (0, 0, -1) returns another normalized vector (in a different direction). To calculate the look at point at an arbitrary distance x from the camera use:

值得一提的是,相机并不是盯着一个点,而是盯着一条无限多的点,每一个点与相机的距离都不同。来自其他答案的代码返回一个长度为一个单位的向量,因为四元数对归一化的z轴向量的应用(0,0,-1)返回另一个归一化的向量(在另一个方向上)。计算从相机使用的任意距离x的角度:

THREE.Vector3( 0, 0, -x ).applyQuaternion( camera.quaternion ).add( camera.position );

三。向量(0,0,-x)applyQuaternion(相机。四元数)。添加(相机。位置);

This takes a point along the z-axis at a distance x from the origin, rotates it to the direction of the camera and then creates a "world point" by adding the camera's position. We want a "world point" (and not just a "relative to the camera point") since camera.lookAt() also takes a "world point" as a parameter.

它沿着z轴取一个点,距离原点x,将它旋转到相机的方向,然后通过增加相机的位置来创建一个“世界点”。我们需要一个“world point”(而不仅仅是“相对于camera point”),因为camerat . lookat()也将“world point”作为参数。

#4


-1  

What I did was to use method lookAt(Vector) just before render the scene like in below code , just try it using it on a new html file :)

我所做的就是在呈现场景之前使用method lookAt(Vector),如下面的代码所示,在一个新的html文件中使用:)



  
    
    
    
  
  
    

    


推荐阅读
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文介绍如何使用线段树解决洛谷 P1531 我讨厌它问题,重点在于单点更新和区间查询最大值。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • poj 3352 Road Construction ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 在洛谷 P1344 的坏牛奶追踪问题中,第一问要求计算最小割,而第二问则需要找到割边数量最少的最小割。通过为每条边附加一个单位权值,可以在求解最小割时优先选择边数较少的方案,从而同时解决两个问题。这种策略不仅简化了问题的求解过程,还确保了结果的最优性。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • 本文探讨了利用JavaScript实现集合的对称差集算法的方法。该算法旨在处理多个数组作为输入参数,同时保留每个数组中元素的原始顺序。算法不会移除单个数组内的重复元素,但会删除在不同数组之间出现的重复项。通过这种方式,能够有效地计算出多个数组的对称差集。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
author-avatar
三生石512606
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有