您的位置:首页 > Web前端 > JavaScript

Three.js呈现3D效果机房--初步方案

2017-10-25 14:51 1401 查看
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);

最后效果



浏览器兼容

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

IE11以下不支持

3.还有很多详细代码没有贴上,需要的加QQ:1132309969
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Three-js webgl