three.js实现围绕某物体旋转


Posted in Javascript onJanuary 25, 2017

话不多说,请看代码:

可以拖动右上角观察变化

<!DOCTYPE html>
<html lang="en" style="width: 100%; height:100%;">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <script src="http://cdn.bootcss.com/three.js/r83/three.min.js"></script>
 <script src="http://cooklife.cn/html/node_modules/dat.gui/build/dat.gui.min.js"></script>
</head>
<body onload="threeExcute()" style="width: 100%; height:100%;">
 <div id="box"></div>
</body>
 <!-- Three.js的核心五步就是:
 1.设置three.js渲染器
 2.设置摄像机camera
 3.设置场景scene
 4.设置光源light
 5.设置物体object 
 -->
 <script>
 // 1.设置three.js渲染器
 var renderer;
 function initThree(){
 width = document.getElementById("box").clientWidth;
 height = document.getElementById("box").clientHeight;
 renderer = new THREE.WebGLRenderer({
 antialias:true
 });/*生成渲染器对象(属性:抗锯齿效果为设置有效)*/
 renderer.setSize(width,height);
 document.getElementById("box").appendChild(renderer.domElement);
 /*设置canvas背景色(clearColor)和背景色透明度(clearAlpha) */
 renderer.setClearColor(0xFFFF00,1.0);
 }

 // 2.设置摄像机camera
 var camera;
 function initCamera(){
 camera = new THREE.PerspectiveCamera(45,width/height,1,10000);
 camera.position.x = 1000;
 camera.position.y = 1000;
 camera.position.z = 1000;
 camera.up.x = 0;
 camera.up.y = 0;
 camera.up.z = 100;
 camera.lookAt({x:0,y:0,z:0}); //设置视野的中心坐标 
 }

 // 3.设置场景
 var scene;
 function initScene(){
 scene = new THREE.Scene();
 }

 // 4.设置光源light
 var light;
 function initLight(){
 light = new THREE.DirectionalLight(0xFF00FF, 1.0, 0); //平行光
 light.position.set(100,100, 200); //设置光源位置
 scene.add(light); //将官员添加到场景
 }

 //5.设置物体 
 var sphereMesh;
 var cubeMesh;
 var cubeMesh2;
 var cubeMesh3;
 var cubeMesh4;
 var cubeMesh5;
 var cubeMesh6;
 function initObject(){
 cubeMesh = new THREE.Mesh(new THREE.BoxGeometry(80,80,80),new THREE.MeshLambertMaterial({color:0xff0000})/*
 设置球体的材质*/);
 cubeMesh2 = new THREE.Mesh(new THREE.BoxGeometry(80,80,80),new THREE.MeshLambertMaterial({color:0xff0000})/*
 设置球体的材质*/);
 cubeMesh3 = new THREE.Mesh(new THREE.BoxGeometry(80,80,80),new THREE.MeshLambertMaterial({color:0xff0000})/*
 设置球体的材质*/);
 sphereMesh = new THREE.Mesh(new THREE.SphereGeometry(200,200,200),new THREE.MeshLambertMaterial({color:0xff00FF})/*设置球体的材质*/); //材质设定 
 sphereMesh.position.set(0,0,0); /*设置物体位置*/ 
 cubeMesh2.position.set(400,0,0); 
 cubeMesh.position.set(390,150,0); 
 cubeMesh3.position.set(380,100,0); 
 /*
 * 旋转要点。。。
 */
 var pivotPoint = new THREE.Object3D();
 pivotPoint.add(cubeMesh);
 pivotPoint.add(cubeMesh2);
 pivotPoint.add(cubeMesh3);
 sphereMesh.add(pivotPoint);
 scene.add(sphereMesh); 
 sphereMesh.name = 'cube' 
 } 

 control = new function () {
  this.rotationSpeedX = 0.001;
  this.rotationSpeedY = 0.001;
  this.rotationSpeedZ = 0.001;
 };

 function addController(){
 var gui = new dat.GUI();
 gui.add(control, 'rotationSpeedX', -0.2, 0.2);
  gui.add(control, 'rotationSpeedY', -0.2, 0.2);
  gui.add(control, 'rotationSpeedZ', -0.2, 0.2);
 }

 function render(){
 renderer.render(scene, camera);
  scene.getObjectByName('cube').rotation.x += control.rotationSpeedX;
  scene.getObjectByName('cube').rotation.y += control.rotationSpeedY;
  scene.getObjectByName('cube').rotation.z += control.rotationSpeedZ;

  requestAnimationFrame(render);
 } 
 function threeExcute(){ 
  initThree(); 
  initCamera(); 
  initScene(); 
  initLight(); 
  initObject(); 
  renderer.clear();
  addController(); 
  render(); 
 } 
 </script>
 <style type="text/css">
 div#box{
  border: none;
  cursor: move;
  width: 100%;
  height: 100%;
  background-color: #EEEEEE;
  }
 </style>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
jQuery 页面载入进度条实现代码
Feb 08 Javascript
$.get获取一个文件的内容示例代码
Sep 11 Javascript
浅析JavaScript基本类型与引用类型
May 28 Javascript
详解JavaScript的另类写法
Apr 11 Javascript
js图片放大镜效果实现方法详解
Oct 28 Javascript
Node.js pipe实现源码解析
Aug 12 Javascript
使用yeoman构建angular应用的方法
Aug 14 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
Dec 13 Javascript
vue 实现input表单元素的disabled示例
Oct 28 Javascript
vue 如何使用递归组件
Oct 23 Javascript
基于Marquee.js插件实现的跑马灯效果示例
Jan 25 #Javascript
angular和BootStrap3实现购物车功能
Jan 25 #Javascript
jquery 实现复选框的全选操作实例代码
Jan 24 #Javascript
谈谈JavaScript数组常用方法总结
Jan 24 #Javascript
js实现日历的简单算法
Jan 24 #Javascript
JSON键值对序列化和反序列化解析
Jan 24 #Javascript
js自制图片放大镜功能
Jan 24 #Javascript
You might like
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
Apache站点配置SSL强制跳转443
2021/03/09 Servers
url地址自动加#号问题说明
2010/08/21 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
小程序清理本地缓存的方法
2018/08/17 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Python中format()格式输出全解
2019/04/12 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
python可以用哪些数据库
2020/06/22 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
巧克力蛋糕店创业计划书
2014/01/14 职场文书
小学运动会口号
2014/06/07 职场文书
三严三实心得体会范文
2014/10/13 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
体检通知范文
2015/04/21 职场文书
漂亮妈妈观后感
2015/06/08 职场文书