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 相关文章推荐
js如何取消事件冒泡
Sep 23 Javascript
jQuery在iframe中无法弹出对话框的解决方法
Jan 12 Javascript
window.open 以post方式传递参数示例代码
Feb 27 Javascript
php结合imgareaselect实现图片裁剪
Jul 05 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
Jan 08 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
jQuery tip提示插件(实例分享)
Apr 28 jQuery
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
JS 验证码功能的三种实现方式
Nov 26 Javascript
jquery 验证用户名是否重复代码实例
May 14 jQuery
JavaScript 如何在浏览器中使用摄像头
Dec 02 Javascript
JavaScript中isPrototypeOf函数
Nov 07 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
php 输出双引号"与单引号'的方法
2010/05/09 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
python添加模块搜索路径方法
2017/09/11 Python
python如何统计序列中元素
2020/07/31 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
pandas的resample重采样的使用
2020/04/24 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
医学专业应届生的自我评价
2014/02/28 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
安全教育的主题班会
2015/08/13 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server