Three.js在场景的左右移动相机

萨特什K

我正在研究Three.js原型,其中将火车的3D模型添加到了场景中。我的要求是在场景的左侧/右侧移动摄像机以查看完整的火车。

我尝试使用下面的代码-

function onKeyDown(){
     var zdelta = 20;
     switch( event.keyCode ) {
         case 65: // look left
        camera.position.z = camera.position.z + zdelta;
        }
     }

但是场景是旋转的,而不是在左侧平移。

因此,如果有人对此表示赞同,这将是非常有用的帮助:)

谢谢,Satheesh K.

木根87

使用keydown事件侦听器绝对是正确的方法。尝试使用以下代码:

var scene, camera, renderer, cubeObj;

init();
animate();


function init() {

	scene = new THREE.Scene();

	camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 1, 1000 );
	camera.position.z = 400;
	camera.position.y = - 10;
	camera.position.x = 10;

	var cubeGeo = new THREE.BoxGeometry( 200, 150, 100 );

	var cubeGeoMaterial = new THREE.MeshPhongMaterial( { color: 0x808080 } );

	cubeObj = new THREE.Mesh( cubeGeo, cubeGeoMaterial );

	cubeObj.position.x = - 70;
	cubeObj.position.y = - 50;
	cubeObj.position.z = 0;
	cubeObj.rotation.x = 0.5;
	scene.add( cubeObj );

	var cubeGeo2 = new THREE.BoxGeometry( 200, 150, 100 );

	var cubeGeoMaterial2 = new THREE.MeshPhongMaterial( { color: 0x808080 } );

	var cubeObj2 = new THREE.Mesh( cubeGeo2, cubeGeoMaterial2 );

	cubeObj2.position.x = 160;
	cubeObj2.position.y = - 50;
	cubeObj2.position.z = - 5;

	cubeObj2.rotation.x = 0.5;

	scene.add( cubeObj2 );

	var cubeGeo3 = new THREE.BoxGeometry( 200, 150, 100 );

	var cubeGeoMaterial3 = new THREE.MeshPhongMaterial( { color: 0x808080 } );

	var cubeObj3 = new THREE.Mesh( cubeGeo3, cubeGeoMaterial3 );

	cubeObj3.position.x = 440;
	cubeObj3.position.y = - 50;
	cubeObj3.position.z = 0;

	cubeObj3.rotation.x = 0.5;

	scene.add( cubeObj3 );

	renderer = new THREE.WebGLRenderer( {
		antialias: true
	} );

	var spotLight = new THREE.SpotLight( 0xffffff );
	spotLight.position.set( 100, 1000, 100 );

	spotLight.castShadow = true;

	spotLight.shadow.mapSize.width = 1024;
	spotLight.shadow.mapSize.height = 1024;

	spotLight.shadow.camera.near = 500;
	spotLight.shadow.camera.far = 4000;
	spotLight.shadow.camera.fov = 30;

	//scene.add( spotLight );

	var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.8 );
	scene.add( directionalLight );

	renderer.setSize( window.innerWidth, window.innerHeight );
	renderer.setClearColor( 0xcce0ff );
	document.body.appendChild( renderer.domElement );

	document.addEventListener( 'keydown', onKeyDown, false );

}

function onKeyDown( event ) {

	const step = 5; // world units

	switch ( event.keyCode ) {

		case 37:
			camera.position.x -= step;
			break;

		case 39:
			camera.position.x += step;
			break;

	}

}

function animate() {

	renderer.render( scene, camera );
	requestAnimationFrame( animate );

}
body {
	margin: 0;
}
canvas {
	display: block;
}
<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/three.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Three.JS FPS控件左右移动

来自分类Dev

Three.JS FPS控件左右移动

来自分类Dev

Three.js-VRControls集成-如何在场景中移动?

来自分类Dev

Three.js - 在场景中加载多种文件格式

来自分类Dev

在场景中添加THREE.Geometry时,Three.JS VRAM内存泄漏

来自分类Dev

Three.js移动相机或两个不同的相机

来自分类Dev

Three.js,从Collada导入的相机无法查看对象场景

来自分类Dev

具有透明度或替代方案的Three.js / webgl RayCasting精灵在场景中

来自分类Dev

无法使Three.js InstancedBufferGeometry出现在场景中

来自分类Dev

three.js-灯光移动时不更新场景照明

来自分类Dev

Three.js将鼠标移动限制为仅场景

来自分类Dev

Three.JS通过移动设备围绕对象旋转相机

来自分类Dev

Three.js将对象移动到相机前面

来自分类Dev

如何在Three.js中沿直线移动相机?

来自分类Dev

Three.js相机的理解

来自分类Dev

Three.js:使用 SetTimeOut 设置启动 5 秒后在场景中产生的灯光位置的动画

来自分类Dev

如何在场景中自动移动相机?

来自分类Dev

OpenGL:左右移动相机时如何使光线静止?

来自分类Dev

如何清除THREE.JS场景

来自分类Dev

无法获得场景以Three.js呈现

来自分类Dev

在画布中渲染Three.js场景

来自分类Dev

场景中的静态对象-Three.js

来自分类Dev

Three.js获得场景的中心

来自分类Dev

Three.js:为相机添加光线

来自分类Dev

Three.js相机lookAt无需滚动?

来自分类Dev

Three.js-如何选择灯光/相机

来自分类Dev

Three.js相机旋转错误

来自分类Dev

无法使Three.js相机向上

来自分类Dev

Three.js:平滑相机围绕原点