@Universa1

Obj loader — добавить возможность поворачивать объекты мышкой в любом направлении?

у меня есть обычный obj loader,помогите добавить у него чтобы объекты можно было мышкой крутить самостоятельно в любом направление,а так же приближать/отдалять колесиком,например можно с OrbitControls.js ,только как это все сделать?
<!doctype html>
<html>
<head>
<meta charset="utf-8">
        <title></title> 

  
     
    </head>

<body>
   	<script src="js/three.min.js"></script>
		<script src="js/OBJLoader.js"></script>	
        <script src="js/script.js"></script>       
     </body>
</html>

var clock = new THREE.Clock();
            var delta = clock.getDelta(); // seconds.
            var rotateAngle = Math.PI / 2 * delta;   // pi/2 radians (90 degrees) per second
			var container, stats;

			var camera, scene, renderer;

			var mouseX = 0, mouseY = 0;

			var windowHalfX = window.innerWidth / 2;
			var windowHalfY = window.innerHeight / 2;


			init();
			animate();


			function init() {

				container = document.createElement( 'div' );
				document.body.appendChild( container );
//Задание размеров и расположения 
				camera = new THREE.PerspectiveCamera( 18, window.innerWidth / window.innerHeight, 1, 5000 );
				camera.position.z = 900;

				// сцена

				scene = new THREE.Scene();
//Задание цвета
				var ambient = new THREE.AmbientLight( 0x006400);
				scene.add( ambient );
//Задание освещения
				var directionalLight = new THREE.DirectionalLight( 0xffeedd );
				directionalLight.position.set( 0, 0, 1 );
				scene.add( directionalLight );

				// Отображение текстур
                var manager = new THREE.LoadingManager();
                manager.onProgress = function ( item, loaded, total ) {

               console.log( item, loaded, total );

};

                 var texture = new THREE.Texture();

                   var onProgress = function ( xhr ) {
            if ( xhr.lengthComputable ) {
           var percentComplete = xhr.loaded / xhr.total * 100;
               console.log( Math.round(percentComplete, 2) + '% downloaded' );}
			   };

                       var onError = function ( xhr ) {
          };

				
				// Загрузка модели
				var loader = new THREE.OBJLoader( manager );
				loader.load( 'cube.obj', function ( object ) {

					object.traverse( function ( child ) {

						if ( child instanceof THREE.Mesh ) {

						

						}

					} );
        //Задание координат
					object.position.x = 10;
                    object.rotation.x = 20* Math.PI / 180;
                    object.rotation.z = 20* Math.PI / 180;
                    object.scale.x = 30;
                    object.scale.y = 30;
                    object.scale.z = 30;
                    obj = object
					scene.add( obj );

				} );

				renderer = new THREE.WebGLRenderer();
				renderer.setSize( window.innerWidth, window.innerHeight );
				container.appendChild( renderer.domElement );

				document.addEventListener( 'mousemove', onDocumentMouseMove, false );

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

			}

			function onWindowResize() {
				windowHalfX = window.innerWidth / 5;
				windowHalfY = window.innerHeight / 5;

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

				renderer.setSize( window.innerWidth, window.innerHeight );
			}
//Движение мышкой
			function onDocumentMouseMove( event ) {
				mouseX = ( event.clientX - windowHalfX ) / 0.5;
				mouseY = ( event.clientY - windowHalfY ) / 0.5;  
			}

			function animate() {
				requestAnimationFrame( animate ) ;
				render();
			}
// Вращение
			function render() {
				
                /*obj.rotation.x += (0.2*(Math.PI / 180));
                obj.rotation.x %=360;*/
/*Движение мышкой
				camera.position.x += ( mouseX - camera.position.x ) * .05;
				camera.position.y += ( - mouseY - camera.position.y ) * .05;*/

				camera.lookAt( scene.position );

				renderer.render( scene, camera );
			}
  • Вопрос задан
  • 613 просмотров
Пригласить эксперта
Ответы на вопрос 1
PavelK
@PavelK
Пример с OrbitCOntrol:
https://codepen.io/nireno/pen/cAoGI

Что бы крутить мышкой сам объект, нужно сначала от канваса получить координаты клика, спроецировать их на 3D сцену (через THREE.Ray), что бы узнать, по какому именно объекту кликнули относительно расположения объекта и камеры, запомнить выбор и при событии изменения кординат мышки вращать конкретно этот объект.
Код:
https://threejs.org/examples/canvas_interactive_cu...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы