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 相关文章推荐
JavaScript 版本自动生成文章摘要
Jul 23 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
Apr 18 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
JS实现OCX控件的事件响应示例
Sep 17 Javascript
jQuery中的编程范式详解
Dec 15 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
Apr 20 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
May 05 Javascript
node.js入门教程之querystring模块的使用方法
Feb 27 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
Oct 19 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
php实现图片局部打马赛克的方法
2015/02/11 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
vue--vuex详解
2019/04/15 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
Pycharm github配置实现过程图解
2020/10/13 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
能源工程专业应届生求职信
2014/03/01 职场文书
拔河比赛口号
2014/06/10 职场文书
毕业生面试求职信
2014/06/23 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
党支部审查意见
2015/06/02 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
考试后的感想
2015/08/07 职场文书
大学军训口号大全
2015/12/24 职场文书
Python实现byte转integer
2021/06/03 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android