gpt4 book ai didi

javascript - 如何通过 three.js 中的轨道控制偏移旋转对象?

转载 作者:行者123 更新时间:2023-11-29 15:13:52 24 4
gpt4 key购买 nike

我想像这样控制对象: helpful diagram

现在相机围绕Y坐标移动,但需要围绕NEW Y移动。代码在这里:

var material = new THREE.MeshLambertMaterial({color: 0x00ff00});
var cube = new THREE.Mesh(geometry, material);
scene.add(cube);
var controls = new THREE.OrbitControls(camera);
cube.position.x = 300;
// controls.target = THREE.Vector3(300, 0, 0);

我发现 target 选项可以设置控件的焦点,但是如果我添加以下代码:controls.target = THREE.Vector3(300, 0, 0); 对象返回屏幕的中心,但它应该在右边缘。

此外,当我将 new THREE.OrbitControls(camera); 设置为 new THREE.OrbitControls(cube); 并添加 controls.target = THREE .Vector3(300, 0, 0); 控件不起作用,但是当我设置 controls.target = THREE.Vector3(301, 0, 0); 它被管理但是不像相机

最佳答案

OrbitControls.target设置控件的焦点,.object 围绕它旋转。但这是一个手动操作。如文档中所述 OrbitControls.update()必须在对相机的变换进行任何手动更改后调用。

例如

controls.target = new THREE.Vector3(1, 0, 0)
controls.update();

看例子:

(function onLoad() {
var container, camera, scene, renderer, controls;

init();
animate();

function init() {
container = document.getElementById('container');

renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = true;
container.appendChild(renderer.domElement);

camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 100);
camera.position.set(0, 1.0, -4);

scene = new THREE.Scene();
scene.background = new THREE.Color(0xffffff);
scene.add(camera);
window.onresize = resize;

var ambientLight = new THREE.AmbientLight(0x404040);
scene.add(ambientLight);

var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
directionalLight.position.set(1,2,1.5);
scene.add( directionalLight );

controls = new THREE.OrbitControls(camera, container);
controls.target = new THREE.Vector3(3, 0, 0)
controls.update();
controls.autoRotate = true;
controls.autoRotateSpeed = 5.0

var axis = new THREE.AxesHelper(1000);
scene.add(axis);

var material = new THREE.MeshPhongMaterial({color:'#b090b0'});
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var mesh = new THREE.Mesh(geometry, material);

scene.add(mesh);
}


function resize() {
var aspect = window.innerWidth / window.innerHeight;
renderer.setSize(window.innerWidth, window.innerHeight);
camera.aspect = aspect;
camera.updateProjectionMatrix();
}

function animate() {
requestAnimationFrame(animate);
controls.update();
render();
}

function render() {
renderer.render(scene, camera);
}
})();
<script src="https://cdn.jsdelivr.net/npm/three@0.115/build/three.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.115/examples/js/controls/OrbitControls.js"></script>

<div id="container"></div>

关于javascript - 如何通过 three.js 中的轨道控制偏移旋转对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51500126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com