three.js通过轨道控制获取相机位置
three.js get camera position with orbit controls
我正在使用三个.js轨道控件,并试图让skybox跟随相机的位置。我在网上搜索了一下,没有找到合适的答案。
我的问题很简单——当使用轨道控制时,我如何检索相机的坐标,以下不起作用:
skybox.position.x = camera.position.x; //Moving skybox with camera
skybox.position.z = camera.position.z; //Moving skybox with camera
skybox.position.y = camera.position.y; //Moving skybox with camera
x和z坐标的值不正确。我也试过:
orbit_controls.object.target
相反,这会导致类似的不正确行为,x和z返回不正确的值。
控制机制的一个看似显而易见的要求似乎很难做到。
由于没有回答SO,我做了一些额外的测试,发现需要进行坐标系转换来检索相机的正确坐标。
以下操作将检索相机在标准世界(x,y,z)空间中的当前位置,并将其应用于skybox。
newZ = -(camera.position.x * Math.cos(5.49779)) - (camera.position.z * Math.sin(5.49779));
newX = (camera.position.x * Math.cos(0.78)) + (camera.position.z * Math.sin(0.78));
skybox.position.x = newX; //Moving skybox with camera
skybox.position.z = newZ; //Moving skybox with camera
skybox.position.y = camera.position.y; //Moving skybox with camera
由于我在其他地方找不到这个答案,我希望这对其他人有用,它解决了我的问题。
这是2019年对2015年问题的回答:
camera.position
是相机的本地位置。您可以通过camera.getWorldPosition(target)
检索全局位置,其中target
是将设置为结果的预定义Vector3
对象。
顺便说一句,你不必用相机移动天空盒子。相反,使用立方体纹理(或渲染的立方体)作为场景背景。
我也有同样的问题,我所做的是在OrbitControls.js文件中为THREE.OrbitControls函数添加以下代码行。
THREE.OrbitControls = function ( object, domElement ) {
.
.
.
this.getPos = function() {
pos = new THREE.Vector3();
pos.copy( this.object.position );
return pos;
};
this.getCenter = function() {
cent = new THREE.Vector3();
cent.copy( this.center );
return cent;
};
.
.
.
}
this.object它指向你创建Controls对象时给出的相机对象,this.center是一个初始化为(0,0,0)的THREE.Vector3(),它定义了你的相机正在看的地方。
而且效果很好。正如您所看到的,有两个getter函数,一个获取相机位置,另一个获取中心。然后我用我的代码这样称呼它:
//Create the controls object
var controls = new THREE.OrbitControls( this.camera, this.renderer.domElement);
//get the camera position whenever you want
var cameraPosition = controls.getPos();
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 从ajax请求中获取javascript对象
- 三.js - 如何获取相机相对于原点的位置
- 获取相机的当前旋转(以度为单位)
- 如何从相机获取流到网页
- three.js通过轨道控制获取相机位置
- 如何使用NEST-API获取相机对象
- 获取threejs场景和相机方向以设置默认视图
- 如何在cordova-camera中获取相机图像的大小