Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
3d 更新摄影机位置以模拟对象旋转_3d_Three.js_Perspectivecamera - Fatal编程技术网

3d 更新摄影机位置以模拟对象旋转

3d 更新摄影机位置以模拟对象旋转,3d,three.js,perspectivecamera,3d,Three.js,Perspectivecamera,我有一个3d场景,相机设置总是在场景的中心 如何通过更新摄影机的x、y、z来更改摄影机的坐标以围绕该中心旋转和缩放 旋转应至少覆盖滚动/偏航/缩放 我使用的是webGL/THREE,但我相信这应该适用于任何语言/引擎后面的数学有点复杂 最佳使用 您可以定义最大和最小角度,并设置自动旋转。后面的数学运算有点复杂 最佳使用 您可以定义最大和最小角度并设置自动旋转。如果我理解正确,您只需“旋转”摄影机位置并将其设置为查看场景原点: camera.position.x = R * Math.cos(be

我有一个3d场景,相机设置总是在场景的中心

如何通过更新摄影机的x、y、z来更改摄影机的坐标以围绕该中心旋转和缩放

旋转应至少覆盖滚动/偏航/缩放


我使用的是webGL/THREE,但我相信这应该适用于任何语言/引擎

后面的数学有点复杂

最佳使用


您可以定义最大和最小角度,并设置自动旋转。

后面的数学运算有点复杂

最佳使用


您可以定义最大和最小角度并设置自动旋转。

如果我理解正确,您只需“旋转”摄影机位置并将其设置为查看场景原点:

camera.position.x = R * Math.cos(bearing) * Math.cos(pitch);
camera.position.y = R * Math.sin(bearing) * Math.cos(pitch);
camera.position.z = R * Math.sin(pitch);
camera.lookAt(new THREE.Vector3(0, 0, 0));

这里,
R
是从相机到原点的距离,
方位
是水平面上的旋转,
俯仰
–垂直面上的旋转。

如果我理解正确,您只需“旋转”相机位置并将其设置为查看场景原点:

camera.position.x = R * Math.cos(bearing) * Math.cos(pitch);
camera.position.y = R * Math.sin(bearing) * Math.cos(pitch);
camera.position.z = R * Math.sin(pitch);
camera.lookAt(new THREE.Vector3(0, 0, 0));

这里,
R
是相机到原点的距离,
方位
是水平面上的旋转,
俯仰
–垂直面上的旋转。

我认为最简单的方法是使用矩阵层次结构

在原点创建一个节点。在需要摄影机的位置创建子节点。在原点旋转节点。问孩子它在哪里,然后把相机放在那里。使用
lookAt
确定相机的方向

这总是比计算圆容易得多。通过在场景中创造性地放置节点、移动节点并使用它们设置摄影机的位置和目标,可以实现各种效果

var canvas=document.querySelector(“#c”);
var摄像机=新的三个透视摄像机(70,1,1,1000);
var scene=new THREE.scene();
//做一些方块
var geometry=新的三个.BoxBufferGeometry(20,20,20);
var material=new THREE.MeshLambertMaterial({color:0xFFEECC});

对于(var z=-1;z我认为最简单的方法是使用矩阵层次结构

在原点创建节点。在需要摄影机的位置创建子节点。在原点旋转节点。询问子节点的位置并将摄影机放在那里。使用
lookAt
确定摄影机的方向

这通常比计算圆容易得多。你可以通过创造性地在场景中放置节点、移动节点并使用它们设置相机的位置和目标来实现各种效果

var canvas=document.querySelector(“#c”);
var摄像机=新的三个透视摄像机(70,1,1,1000);
var scene=new THREE.scene();
//做一些方块
var geometry=新的三个.BoxBufferGeometry(20,20,20);
var material=new THREE.MeshLambertMaterial({color:0xFFEECC});

对于(var z=-1;z)我如何以编程方式控制它而不是使用输入?您可以像EventSteners、controls.dollyIn()、controls.dollyOn()和其他许多方法一样调用它,请参见controls对象。我如何以编程方式控制它而不是使用输入?您可以像EventSteners、controls.dollyIn()一样调用它,controls.dollyOn()等,请参见控件对象。