【发布时间】:2022-03-07 14:27:22
【问题描述】:
我的场景中有两个对象。我正在使用
<script src="js/controls/LeapTrackballControls.js" ></script>
用于移动相机,所以感觉就像物体随着我手的移动而旋转。
问题是另一个物体也在移动,我希望它始终保持在我面前。我的意思是,即使相机移动,对象总是在画布/资源管理器内的同一位置。
对不起,如果我没有正确解释自己。
感谢任何帮助。
编辑:
var controls = new THREE.LeapTrackballControls( camera , controller );
所以,我在场景中间有一个球体。我使用 LeapTrackball 库围绕场景中心移动相机。这让用户感觉球体围绕着他的中心旋转。
model = new THREE.Mesh(modelGeo, modelMat);
model.geometry.dynamic = true;
model.position.set(0, 0, 0);
scene.add(model);
我的问题是我有另一个形状:
myMesh = new THREE.Mesh(circleGeometry, material);
myMesh.position.set(0, 0, 10);
scene.add(myMesh);
这也受相机旋转的影响。我想要的是保持球体的“假旋转”,而另一个网格保持在屏幕中间(0,0,10)。
好的,这是我的相机对象。
var camera = new THREE.PerspectiveCamera(55, window.innerWidth / window.innerHeight, 0.1, 5000);
还有我的渲染函数,用于更新相机的控制/移动。
function render() {
controls.update();
renderer.render(scene, camera);
doMouse();
if(useOrbitControls){
orbitControls.update();
}
}
我正在使用 Leap 控制器,这是构建它的函数:
function leapMotion() {
var controllerOptions = {
enableGestures: true
, background: true
, frameEventName: 'animationFrame'
, };
[...]
controller.on('frame', onFrame);
基本上,这意味着 onFrame 函数在每次接收到帧时都会执行(大约每秒 60 个)
function onFrame(frame){
[...]
}
仅此而已,所有魔法都来自您可以在此处找到的库:
【问题讨论】:
-
嗯,您不需要 静态 对象,因为根据您的说法,您的对象已经在固定位置。如果您移动相机,当然两个物体都会移动(虽然这是您的 POV 移动),您应该实际旋转物体或用相机移动固定物体,如果您发布更多代码,我可以帮助您。
-
@Sosdoc 已编辑!你还需要什么吗?
-
多一点代码(你的相机对象,requestAninationFrame 函数)会有所帮助,如果你能放一个 jsfiddle 或其他东西会更好。
标签: javascript 3d three.js leap-motion