Three.js实现3D机房效果


Posted in Javascript onDecember 30, 2018

3D机房系统是最近用户的需求,通过相关了解最后使用Three.js,也发现最近有东西可以写出来分享:

  • webGL可以让我们在canvas上实现3D效果。而three.js是一款webGL框架,由于其易用性被广泛应用
  • Three.js是通过对WebGL接口的封装与简化而形成的一个易用的图形库

分步实现3D效果

  • 初始化3D模型参数
  • 开始搭建场景
  • 初始化渲染器
  • 初始化摄像机
  • 创建场景
  • 灯光布置
  • 创建网格线
  • 循环渲染界面
  • 创建鼠标控制器
  • 添加对象到场景中

一 . 初始化3D模型参数

//参数处理 
this.option = new Object(); 
this.option.antialias = option.antialias || true; 
this.option.clearCoolr = option.clearCoolr || 0x1b7ace; 
this.option.showHelpGrid = option.showHelpGrid || false; 
//对象 
this.id = id; 
this.width = width(); 
this.height = height(); 
this.renderer = null;//渲染器 
this.scene = null;//场景 
this.camera = null;//摄像机 
this.selected=null; 
this.objects = []; 
this.mouseClick = new THREE.Vector2(); 
this.raycaster = new THREE.Raycaster(); 
this.controls = null;//鼠标控制器 
this.trsnaformControls = null;//鼠标控制器 
this.dragcontrols = null; 
this.objList = json.objects;//对象列表 
this.eventList = json.events;//事件对象列表 
this.dragList = []; 
this.objectStatusList = {}; 
this.clickList = []; 
var that = this;

对于一些需要使用的参数,开始加载进行初始化操作。

二 . 开始搭建场景

搭建场景包含一些具体的初始化操作 一些初始化方法(之后才对具体方法加以说明):

var that = this; 
room3dObj = that; 
that.initThree(that.id); //初始化渲染器 
that.initCamera(); //初始化摄像机 
that.initScene();//创建场景 
that.initHelpGrid();//创建网格 
that.initLight();//灯光布置 
//添加3D对象 
$.each(that.objList, function (index,obj) { 
that.InitAddObject(obj);//添加对象到场景中 
}); 
that.initMouseCtrl();//创建鼠标控制器 
that.animation();//循环渲染界面

三 . 初始化渲染器

渲染器 WebGLRenderer 定义语法:

var that = this; 
that.renderer = new THREE.WebGLRenderer({ alpha: true, antialias: that.option.antialias }); 
that.renderer.setSize(that.width, that.height); 
$(“#” + that.id).append(that.renderer.domElement); 
that.renderer.setClearColor(that.option.clearCoolr, 1.0); 
that.renderer.shadowMap.enabled = true; 
that.renderer.shadowMapSoft = true; 
//事件 
that.renderer.domElement.addEventListener(‘mousedown',that.onDocumentMouseDown, false); 
that.renderer.domElement.addEventListener(‘mousemove',that.onDocumentMouseMove, false);

四 . 初始化摄像机

采用PerspectiveCamera 相机:

var that = this;
  that.camera = new THREE.PerspectiveCamera(45, that.width / that.height, 1, 100000);
  that.camera.name = 'mainCamera';
  that.camera.position.x =0;
  that.camera.position.y =2000;
  that.camera.position.z =1800;
  that.camera.up.x = 0;
  that.camera.up.y =1;
  that.camera.up.z =0;
  that.camera.lookAt({ x: 100, y: 0, z: 100 });
  that.objects.push(that.camera);
  that.dragList.push(that.camera);
  that.clickList.push(that.camera);

五 . 创建场景

var that = this; 
that.scene = new THREE.Scene();

六 . 灯光布置

/* 
AmbientLight: 环境光,基础光源,它的颜色会被加载到整个场景和所有对象的当前颜色上。 
PointLight:点光源,朝着所有方向都发射光线 
SpotLight :聚光灯光源:类型台灯,天花板上的吊灯,手电筒等 
DirectionalLight:方向光,又称无限光,从这个发出的光源可以看做是平行光. 
*/ 
var that = this; 
var light = new THREE.AmbientLight(0xcccccc); 
light.position.set(0, 0,0); 
that.scene.add(light); 
var light2 = new THREE.PointLight(0x555555); 
light2.shadow.camera.near =1; 
light2.shadow.camera.far = 5000; 
light2.position.set(0, 350, 0); 
light2.castShadow = true;//表示这个光是可以产生阴影的 
that.scene.add(light2);

七 . 创建网格

var that = this; 
if (that.option.showHelpGrid) { 
var helpGrid = new THREE.GridHelper(1000, 50); 
that.scene.add(helpGrid); 
}

八 . 循环渲染界面

var that = room3dObj; 
if (TWEEN != null && typeof (TWEEN) != ‘undefined') { 
TWEEN.update(); 
} 
requestAnimationFrame(that.animation); 
that.renderer.render(that.scene, that.camera);

九 . 创建鼠标控制器

var that = this; 
that.controls = new THREE.OrbitControls(that.camera,that.renderer.domElement); 
that.controls.addEventListener(‘change', that.updateControls);

十 . 添加对象到场景中

var that = room3dObj; 
that.scene.add(obj); 
that.objects.push(obj);

最后效果

Three.js实现3D机房效果

浏览器兼容

  • 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome.
  • IE11以下不支持

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript引导程序
Oct 26 Javascript
页面实时更新时间的JS实例代码
Dec 18 Javascript
JavaScript仿静态分页实现方法
Aug 04 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
jQuery通过ajax快速批量提交表单数据
Oct 25 Javascript
详解node+express+ejs+bootstrap构建项目
Sep 27 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
May 04 Javascript
总结javascript三元运算符知识点
Sep 28 Javascript
微信小程序实现多个按钮的颜色状态转换
Feb 15 Javascript
es6 symbol的实现方法示例
Apr 02 Javascript
antd form表单数据回显操作
Nov 02 Javascript
JavaScript对象的特性与实践应用深入详解
Dec 30 #Javascript
three.js搭建室内场景教程
Dec 30 #Javascript
Three.JS实现三维场景
Dec 30 #Javascript
Three.js实现简单3D房间布局
Dec 30 #Javascript
JavaScript数组特性与实践应用深入详解
Dec 30 #Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
Dec 30 #Javascript
微信小程序使用setData修改数组中单个对象的方法分析
Dec 30 #Javascript
You might like
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
smarty简单分页的实现方法
2014/10/27 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
python装饰器深入学习
2018/04/06 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
如何获取Python简单for循环索引
2019/11/21 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
竞选班干部的演讲稿
2014/04/24 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
大学生学习计划书
2014/09/15 职场文书
商场营业员岗位职责
2015/04/14 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python