【发布时间】:2019-05-31 16:11:13
【问题描述】:
我已向球体添加了变换控件,因此它可以在我的场景中移动。我还添加了轨道控件来平移我的场景,效果很好。首次加载场景时没有延迟,效果很好,但是一旦我移动球体,就会出现明显的延迟。
我可以解决这个问题,但我真正想要解决的是,即使我取消选择球体并且不再移动它,仅使用轨道控制时仍然会出现延迟。
- 为什么即使在我没有积极使用转换控件后,延迟仍然存在?
var renderer, scene, camera, controls;
init();
var geometry = new THREE.SphereGeometry( .025, 5, 5 );
var material = new THREE.MeshPhongMaterial( {color: 0xffffff} );
var sphere = new THREE.Mesh( geometry, material );
addControls(sphere,"translate");
scene.add(sphere);
render();
function addControls(object, type) {
var transformControl = new THREE.TransformControls( camera, renderer.domElement );
transformControl.addEventListener( 'change', render );
transformControl.addEventListener( 'dragging-changed', function ( event ) {
controls.enabled = ! event.value;
} );
transformControl.attach( object );
transformControl.setMode( type );
transformControl.setSpace( "local" );
scene.add( transformControl );
}
function init() {
// Renderer
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(WIDTH, HEIGHT);
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setClearColor(0xffffff);
document.body.appendChild(renderer.domElement);
// Camera
camera = new THREE.PerspectiveCamera(100, WIDTH / HEIGHT, 0.1, 1000);
camera.position.set(500, 0, 0);
// Orbit Controls
controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.maxDistance = 5;
// Scene
scene = new THREE.Scene();
}
function render() {
renderer.render(scene, camera);
requestAnimationFrame(render);
}
我尝试通过在addControls() 中放置以下内容来从场景中移除变换控件:
window.addEventListener( 'keypress', function ( event ) {
transformControl.detach( object );
transformControl.dispose();
scene.remove(transformControl);
} );
在我稍微移动球体之后,我会按下一个键,变换控件会消失,但滞后仍在继续。 我预计在移动球体时可能会有一些滞后,但是当它不被移动时这会消失。
相反,即使我只使用轨道控制,也会出现延迟。
- 如何才能最大限度地减少这种延迟?
【问题讨论】:
-
尝试使用 chrome devtools(性能)来追踪问题。
标签: javascript three.js 3d controls