Dev*_*Dev 11 camera vector three.js
我没有使用camera.rotation或lookAt()函数旋转相机,而是想直接将相机矢量传递给相机...是否可以直接设置相机外观矢量并且可以读取外观从相机矢量?
Wes*_*ley 29
相机没有"外观矢量",因此您无法进行设置.
但是,您可以point通过将您的外观向量添加到相机的位置,然后调用来构建要查看的内容
camera.lookAt( point );
Run Code Online (Sandbox Code Playgroud)
以下是如何确定相机正在查看的方向,假设相机没有父级(场景除外).
相机向下看其内部负z轴,因此创建一个向下指向负z轴的向量:
var vector = new THREE.Vector3( 0, 0, - 1 );
Run Code Online (Sandbox Code Playgroud)
现在,将相同的旋转应用于应用于相机的矢量:
vector.applyQuaternion( camera.quaternion );
Run Code Online (Sandbox Code Playgroud)
生成的矢量将指向相机正在查看的方向.
或者,您可以使用以下方法,即使相机是另一个对象的子项,该方法也可以使用:
camera.getWorldDirection( dirVector );
Run Code Online (Sandbox Code Playgroud)
three.js r.73
上面的答案包含为util,这就是我对Three Utils的处理:
THREE.Utils = {
cameraLookDir: function(camera) {
var vector = new THREE.Vector3(0, 0, -1);
vector.applyEuler(camera.rotation, camera.eulerOrder);
return vector;
}
};
Run Code Online (Sandbox Code Playgroud)
叫它 THREE.Utils.cameraLookDir(camera);
小智 6
这些其他答案非常有见地,但并不完全正确.代码返回一个矢量,该矢量指向摄像机指向的相同方向.这是一个很好的开始!
但是,除非摄像机位于原点(0,0,0)(或者恰好位于将原点连接到旋转矢量点而不超过该点的线段上,因此该点位于摄像机后面)摄像机赢了看着那一点.显然 - 只是常识 - 相机的位置也会影响正在观察的点.考虑一下!!
lookAt()无论相机在何处,相机方法都会查看3D空间中的某个点.因此,要获得相机正在观察的点,您需要通过调用以下内容来调整相机位置:
vec.add( camera.position );
值得一提的是,相机看起来并不是单点,而是俯视无限数量的点,每个点与相机的距离不同.来自其他答案的代码返回的长度恰好是一个单位的向量,因为四元数应用于规范化的z轴向量(0,0,-1)会返回另一个归一化向量(在不同的方向上).要计算距x摄像机任意距离的点的外观:
THREE.Vector3( 0, 0, -x ).applyQuaternion( camera.quaternion ).add( camera.position );
这将沿着z轴x与原点相距一段距离,将其旋转到相机的方向,然后通过添加相机的位置来创建"世界点".我们想要一个"世界点"(而不仅仅是"相对于相机点"),因为它camera.lookAt()还将"世界点"作为参数.
| 归档时间: |
|
| 查看次数: |
22157 次 |
| 最近记录: |