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——表单应用范例
Feb 20 Javascript
javascript:void(0)的作用示例介绍
Oct 28 Javascript
图片翻转效果具体实现代码
Jan 09 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
May 04 Javascript
Bootstrap开发实战之响应式轮播图
Jun 02 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
Feb 02 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
Sep 14 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
js根据json数据中的某一个属性来给数据分组的方法
Oct 08 Javascript
JavaScript或jQuery 获取option value值方法解析
May 12 jQuery
基于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面向对象全攻略 (九)访问类型
2009/09/30 PHP
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
Python描述器descriptor详解
2015/02/03 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
python3设计模式之简单工厂模式
2017/10/17 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
python文件路径操作方法总结
2020/12/21 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
实习鉴定评语
2014/01/19 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
大学生入党自传2015
2015/06/26 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL