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 的 prototype问题。
Jan 03 Javascript
20个非常棒的Jquery实用工具 国外文章
Jan 01 Javascript
Jquery数独游戏解析(一)-页面布局
Nov 05 Javascript
jQuery 在光标定位的地方插入文字的插件
May 10 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
Dec 05 Javascript
js闭包实现按秒计数
Apr 23 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
Dec 14 Javascript
微信小程序 实例开发总结
Apr 26 Javascript
妙用Angularjs实现表格按指定列排序
Jun 23 Javascript
微信小程序实现商品属性联动选择
Feb 15 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 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 读取文件的正确方法
2009/04/29 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
php实现读取超大文件的方法
2014/07/28 PHP
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
详解python:time模块用法
2019/03/25 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
Python之指数与E记法的区别详解
2019/11/21 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
中学生爱国演讲稿
2013/12/31 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
工商管理专业自荐信
2014/06/03 职场文书
课程设计的心得体会
2014/09/03 职场文书
小学见习报告
2014/10/31 职场文书
见义勇为事迹材料
2014/12/24 职场文书
2015年团支部工作总结
2015/04/03 职场文书
青春雷锋观后感
2015/06/10 职场文书
新郎婚礼致辞
2015/07/27 职场文书
证婚人婚礼致辞
2015/07/28 职场文书