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 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
jquery HotKeys轻松搞定键盘事件代码
Aug 30 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
JS链式调用的实现方法
Mar 07 Javascript
js如何判断用户是否是用微信浏览器
Jun 05 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
Dec 20 Javascript
javascript断点调试心得分享
Apr 23 Javascript
基于jQuery实现无缝轮播与左右点击效果
May 13 jQuery
JavaScript使用递归和循环实现阶乘的实例代码
Aug 28 Javascript
Vue.js实现的购物车功能详解
Jan 27 Javascript
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 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 正则学习实例
2008/07/30 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python实现读取json文件到excel表
2017/11/18 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
python线程池如何使用
2020/05/28 Python
降低python版本的操作方法
2020/09/11 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
YII2 全局异常处理深入讲解
2021/03/24 PHP
学校出纳员岗位职责
2014/03/18 职场文书
党员公开承诺书内容
2014/05/20 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
学校运动会通讯稿
2015/07/18 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js