加载文件的THREE.js旋转

笑人

我已经在这个ThreeJS库中玩了两周了,利用其他人的启发,我制作了一个显示外部.stl文件的画布。

我唯一的问题是我似乎无法对其进行任何转换。我可以很好地移动相机,但即使是最简单的转换也无法工作。我对JavaScript不太满意,因此我可能错过了一些基本部分。

<!DOCTYPE html>
<html lang="en">
	<head>
		<title>three.js webgl - STL</title>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
		<style>
			body {
				background-color: #000000;
				margin: 0px;
				overflow: hidden;
			}

		</style>
	</head>
	<body>
		<script src="../build/three.min.js"></script>

		<script src="js/loaders/STLLoader.js"></script>

		<script src="js/Detector.js"></script>
		<script src="dat.gui.js"></script>

		<script>

			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();

			var container;
			var rotationSpeed;
			var camera, cameraTarget, scene, renderer;

			init();
			animate();

			function init() {

				container = document.createElement( 'div' );
				document.body.appendChild( container );
				camera = new THREE.PerspectiveCamera( 35, window.innerWidth / window.innerHeight, 1, 15 );
				camera.position.set( -3, 1, 3 );

				cameraTarget = new THREE.Vector3( 0, 0, 0 );

				scene = new THREE.Scene();
				scene.fog = new THREE.Fog( 0x72645b, 2, 15 );


				// Ground

				var plane = new THREE.Mesh( new THREE.PlaneGeometry( 40, 40 ), new THREE.MeshPhongMaterial( { ambient: 0x999999, color: 0x999999, specular: 0x101010 } ) );
				plane.rotation.x = -Math.PI/2;
				plane.position.y = -0.5;
				scene.add( plane );

				plane.receiveShadow = true;


				// ASCII file

				var loader = new THREE.STLLoader();
				loader.addEventListener( 'load', function ( event ) {

					var geometry = event.content;
					var material = new THREE.MeshPhongMaterial( { ambient: 0xff5533, color: 0xff5533, specular: 0x111111, shininess: 200 } );
					var model = new THREE.Mesh( geometry, material );

					model.position.set( 0, 0.05, 0 );
					model.rotation.set( Math.PI / 2.0, - Math.PI / 1.5, 0 );
					model.scale.set( 0.01, 0.01, 0.01 );

					model.castShadow = true;
					model.receiveShadow = true;

					scene.add( model );

				} );
				loader.load( './models/stl/ascii/cover.stl' );


				// Lights

				scene.add( new THREE.AmbientLight( 0x777777 ) );

				addShadowedLight( 1, 1, 1, 0xffffff, 1.35 );
				addShadowedLight( 0.5, 1, -1, 0xffaa00, 1 );

				// renderer

				renderer = new THREE.WebGLRenderer( { antialias: true } );
				renderer.setSize( window.innerWidth, window.innerHeight );

				renderer.setClearColor( scene.fog.color, 1 );

				renderer.gammaInput = true;
				renderer.gammaOutput = true;

				renderer.shadowMapEnabled = true;
				renderer.shadowMapCullFace = THREE.CullFaceBack;

				container.appendChild( renderer.domElement );


				window.addEventListener( 'resize', onWindowResize, false );

			}

			function addShadowedLight( x, y, z, color, intensity ) {

				var directionalLight = new THREE.DirectionalLight( color, intensity );
				directionalLight.position.set( x, y, z )
				scene.add( directionalLight );

				directionalLight.castShadow = true;
				// directionalLight.shadowCameraVisible = true;

				var d = 1;
				directionalLight.shadowCameraLeft = -d;
				directionalLight.shadowCameraRight = d;
				directionalLight.shadowCameraTop = d;
				directionalLight.shadowCameraBottom = -d;

				directionalLight.shadowCameraNear = 1;
				directionalLight.shadowCameraFar = 4;

				directionalLight.shadowMapWidth = 1024;
				directionalLight.shadowMapHeight = 1024;

				directionalLight.shadowBias = -0.005;
				directionalLight.shadowDarkness = 0.15;

			}
/*			var controls = new function()
			{
				this.rotationSpeed = 0.2;
			}

			var gui = new dat.GUI();
			gui.add(controls, 'rotationSpeed',0,1);
*/			
			function onWindowResize() {

				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();

				renderer.setSize( window.innerWidth, window.innerHeight );

			}

			function animate() {

				requestAnimationFrame( animate );

				render();

			}

			function render() {

				var timer = Date.now() * 0.0005;


				camera.lookAt( cameraTarget );

                //THIS LINE DOESN'T WORK
                //model.position.x = Math.cos( timer );
                //model.position.z = Math.sin( timer );
				renderer.render( scene, camera );

			}

		</script>
	</body>
</html>

render()函数之前的最后几行只是给我一个黑色的空白页。甚至像model.position.x + = 0.02; 杀死它

aravind.udayashankara

我可以在这里找到错误,但是很抱歉,某些无法将代码移植到JSFIDDLE的方法

这是我发现的问题,

模型变量未在全局范围内声明。它在init()函数中本地初始化,并且您尝试在render函数中使用该变量进行操作,该变量没有任何作用域。

因此,解决方案是,只需在调用init()函数之前声明变量模型,就像在此声明的其他变量一样,通过在下面的行中添加此变量即可。

var model;

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Three.js,WebGL显示对象的顶点并旋转对象

来自分类Dev

Blender导出three.js动画-骨骼奇怪地旋转

来自分类Dev

three.js在平面上旋转相机

来自分类Dev

Node.js-在运行时加载文件

来自分类Dev

three.js通过鼠标向下旋转对象并移动

来自分类Dev

使用three.js JSONloader在指定的URL上加载文件(Django)

来自分类Dev

使用Three.js使用画布旋转纹理

来自分类Dev

Three.js:添加和删除旋转对象的子代

来自分类Dev

Three.js-旋转不遵守局部方向

来自分类Dev

Three.js将相机旋转到特定位置

来自分类Dev

three.js旋转面向对象

来自分类Dev

旋转相机后,Three.js Skybox似乎坏了

来自分类Dev

围绕对象轴THREE.js旋转对象

来自分类Dev

Three.js相机旋转错误

来自分类Dev

three.js通过轴方向旋转对象

来自分类Dev

Three.js:重新定向旋转轴

来自分类Dev

获取面部旋转Three.js

来自分类Dev

在Three.js的中心旋转mergeometry对象

来自分类Dev

three.js中旋转或惯用的方向

来自分类Dev

angular.min.js XMLHttpRequest无法加载文件

来自分类Dev

Three.js旋转和定位几何

来自分类Dev

当对象旋转时Three.js旋转相机

来自分类Dev

XMLHttpRequest无法在Angular js中加载文件错误

来自分类Dev

Three.js旋转

来自分类Dev

Angular js加载文件并将内容放置在div中

来自分类Dev

Three.js-相机旋转和TransformControls

来自分类Dev

.babylon js 文件相机旋转

来自分类Dev

THREE.JS 无法加载 mtl 文件

来自分类Dev

在three.js中旋转对象