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 相关文章推荐
Jquery下的26个实用小技巧(jQuery tips, tricks &amp; solutions)
Mar 01 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
Mar 01 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
Dec 17 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
Aug 22 Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
Sep 11 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
Vue数据绑定实例写法
Aug 06 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 Javascript
微信小程序实现可长按移动控件
Nov 01 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
基于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
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
Python单例模式实例详解
2017/03/01 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
如何基于python实现归一化处理
2020/01/20 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
python实现飞船大战
2020/04/24 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
一组SQL面试题
2016/02/15 面试题
酒店节能减排方案
2014/05/26 职场文书
改革共识倡议书
2014/08/29 职场文书
未婚证明书模板
2014/10/08 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang