threejs 鼠标移动控制模型旋转
来源:互联网 发布:软件开发兼职合同 编辑:程序博客网 时间:2024/05/18 02:09
<!doctype html><html><head><meta charset="utf-8"><title>threejs鼠标移动控制模型旋转</title></head><body> <script src="js/threejs/three.js"></script> <!--<script src="http://jsrun.it/assets/a/q/3/W/aq3Wl" type="text/javascript"></script>--> <script src="js/threejs/renderers/CanvasRenderer.js"></script> <script src="js/threejs/renderers/Projector.js"></script> <script src="js/threejs/DDSLoader.js"></script> <script src="js/threejs/MTLLoader.js"></script> <script src="js/threejs/OBJLoader.js"></script> <script src="js/jquery-2.1.1.min.js"></script> <script src="https://raw.githack.com/mrdoob/three.js/master/examples/fonts/helvetiker_regular.typeface.js"></script> <script> var camera, scene, renderer, geometry, material, mesh; var pivot5, pivot6; init(); function init() { scene = new THREE.Scene(); camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 10000); camera.position.z = 500; camera.position.y = 100; scene.add(camera); //坐标轴辅助 var axes = new THREE.AxisHelper(500); scene.add(axes); renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setClearColor( 0xffffcc ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize(window.innerWidth, window.innerHeight); //添加环境光 var ambient = new THREE.AmbientLight( 0x444444 ); scene.add( ambient ); // 添加定向光线 var directionalLight = new THREE.DirectionalLight( 0xffeedd ); directionalLight.position.set( 0, 0, 1 ).normalize(); scene.add( directionalLight ); var onProgress = function ( xhr ) { if ( xhr.lengthComputable ) { var percentComplete = xhr.loaded / xhr.total * 100; console.log( Math.round(percentComplete, 2) + '% downloaded' ); } }; //加载obj 、材质、贴图 var onError = function ( xhr ) { }; THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() ); var texture = new THREE.Texture(); var loader = new THREE.OBJLoader(); loader.setPath( 'models/' ); pivot5 = new THREE.Object3D(); //导入obj模型 loader.load( 'tree.obj', function ( object ) { object.traverse( function ( child ) { if ( child instanceof THREE.Mesh ) { child.material.map = texture; //将模型放大40倍 var n=40; child.scale.x =n; child.scale.y =n; child.scale.z =n; } } ); pivot5.position.x = -100; pivot5.position.z = 100; object.position.x = 0; object.position.z = 0; object.position.y = 50; //scene.add( object ); pivot5.add(object); }, onProgress, onError ); //导入贴图 var cubemtlLoader = new THREE.MTLLoader(); cubemtlLoader.setPath( 'models/' ); pivot6 = new THREE.Object3D(); cubemtlLoader.load( 'cube.mtl', function( materials ) { materials.preload(); var objLoader = new THREE.OBJLoader(); objLoader.setMaterials( materials ); objLoader.setPath( 'models/' ); objLoader.load( 'cube.obj', function ( object ) { var n= 20; object.scale.x =n; object.scale.y =n; object.scale.z =n; //修改旋转轴的坐标点,默认是(0,0,0); pivot6.position.x = 100; pivot6.position.z = 100; object.position.x = 0; object.position.z = 0; object.position.y = 100; pivot6.add(object); render(); }, onProgress, onError ); }); scene.add(pivot5); scene.add(pivot6); document.body.appendChild(renderer.domElement); document.addEventListener( 'mousedown', onMouseDown, false ); document.addEventListener( 'mouseup', onMouseup, false ); } var rotateStart; rotateStart = new THREE.Vector2(); /* 鼠标移动控制模型旋转思想: 当按下鼠标时及时当前鼠标的水平坐标clientX1,在鼠标移动的过程中不断触发onMouseMove事件, 不停的记录鼠标的当前坐标clientX2,由当前坐标减去记录的上一个水平坐标, 并且将当前的坐标付给上一个坐标clientX1,计算两个坐标的之间的差clientX2-clientX1, 将得到的差值除以一个常量(这个常量可以根据自己的需要调整),得到旋转的角度 */ function onMouseDown(event){ event.preventDefault(); mouseDown = true; mouseX = event.clientX;//出发事件时的鼠标指针的水平坐标 rotateStart.set( event.clientX, event.clientY ); document.addEventListener( 'mousemove', onMouseMove2, false ); } function onMouseup(event){ mouseDown = false; document.removeEventListener("mousemove", onMouseMove2); } function onMouseMove2(event){ if(!mouseDown){ return; } var deltaX = event.clientX - mouseX; mouseX = event.clientX; rotateScene(deltaX); } //设置模型旋转速度,可以根据自己的需要调整 function rotateScene(deltaX){ //设置旋转方向和移动方向相反,所以加了个负号 var deg = -deltaX/279; //deg 设置模型旋转的弧度 pivot5.rotation.y += deg; pivot6.rotation.y += deg; render(); } function render() { renderer.render(scene, camera); } </script></body></html>
阅读全文
0 0
- threejs 鼠标移动控制模型旋转
- unity使用鼠标控制移动、缩放、旋转
- Threejs载入obj和mtl以及添加旋转和阴影,自适应,鼠标控制
- OpenGL之鼠标控制坐标系旋转、缩放、移动
- 鼠标控制摄像机旋转,平移,物体的移动
- Unity鼠标控制物体360°旋转和点击移动
- Unity3D 游戏引擎之控制模型移动旋转与碰撞
- 鼠标控制旋转
- threejs中坐标系转换和实现物体跟随鼠标移动
- 移动和旋转模型
- Unity控制移动、旋转
- 鼠标移动控制代码
- 鼠标控制小球移动
- 鼠标控制物体移动
- unity3d鼠标移动、旋转物体
- unity 鼠标移动 缩放,旋转
- Unity3d 拖动鼠标旋转模型
- Unity通过射线碰撞选择模型,然后控制模型的移动、旋转、缩放等动作
- Win7 开发WCF时 提示 进程不具有此命名空间的访问权限
- SkinnedMesh原理及一些应用
- Kibana实践
- 链接收藏
- request用getQueryString()获取参数中文转码问题
- threejs 鼠标移动控制模型旋转
- 系统温习Java
- redis集群JedisCluster优化
- IEA和API两盆冷水浇灭油价涨势今晚EIA会是多头救星
- 怎么把图片转换成ico格式
- 随机生成6位数,不足6位补零
- 磁疗是真的吗?磁场对穴位和经络传感的作用与影响
- Java设计模式之单例模式
- Python使用AIML搭建聊天机器人