美文网首页
3D机房实现探索(一)

3D机房实现探索(一)

作者: Mr_ZhaiDK | 来源:发表于2018-01-10 16:29 被阅读0次

由于对WebGL的兴趣,初步接触Three.js,决定将学习过程进行记录,以便于后期复习。

初步以实现3D机房为目标,熟悉Three.js,初步设想3D机房构思如图1:

图1.3D机房初步构思图

一、下载Three.js

先去下载代码,它的地址是: https://github.com/mrdoob/three.js。

其中,有用的是Build目录,其中包含两个文件,three.js 和three.min.js 。这是three.js最终被引用的文件。一个已经压缩,一个没有压缩的js文件。

为了更清晰的理解three.js原理,在此使用three.js。

二、IDE选择

由于大部分是对JavaScript进行开发操作,因此WebStorm和VS code是最佳选择。

根据操作习惯和轻量级原因,选择VS code作为IDE编辑器。

三、基本环境

1.npm 安装

2.vs code相关插件安装(美化插件、智能提示插件等)

3.npm插件安装,包括live-server(由于three.js一些渲染和文件,需要web服务器的形式获取,不支持跨域)

四、three.js基本概念

1.OpenGL,WebGL到Three.js

OpenGL大概许多人都有所耳闻,它是最常用的跨平台图形库。

WebGL是基于OpenGL设计的面向web的图形标准,提供了一系列JavaScript API,通过这些API进行图形渲染将得以利用图形硬件从而获得较高性能。

Three.js是通过对WebGL接口的封装与简化而形成的一个易用的图形库。

简单点的说法:

WebGL可以看成是浏览器给我们提供的接口,在javascript中可以直接用这些API进行3D图形的绘制;而Three.js就是在这些接口上又帮我们封装得更好用一些。

2.Three.js中的一些概念

要在屏幕上展示3D图形,思路大体上都是这样的:

构建一个三维空间,Three中称之为场景(Scene);

选择一个观察点,并确定观察方向/角度等,Three中称之为相机(Camera);

在场景中添加供观察的物体Three中的物体有很多种,包括Mesh,Line,Points等,它们都继承自Object3D类

将观察到的场景渲染到屏幕上的指定区域,Three中使用Renderer完成这一工作

3.Scene

场景是所有物体的容器,也对应着我们创建的三维世界。

4.Camera 坐标系

Camera是三维世界中的观察者,为了观察这个世界,首先我们要描述空间中的位置。

Three中使用采用常见的右手坐标系定位。

5.三维投影

Three中的相机有两种,分别是正投影相机THREE.OrthographicCamera和透视投影相机THREE.PerspectiveCamera。

正交投影与透视投影的区别如上图所示,左图是正交投影,物体发出的光平行地投射到屏幕上,远近的方块都是一样大的;右图是透视投影,近大远小,符合我们平时看东西的感觉。

1)正交投影相机

注:图中的”视点”对应着Three中的Camera。

这里补充一个视景体的概念:视景体是一个几何体,只有视景体内的物体才会被我们看到,视景体之外的物体将被裁剪掉。这是为了去除不必要的运算。

正交投影相机的视景体是一个长方体,OrthographicCamera的构造函数是这样的:OrthographicCamera( left, right, top, bottom, near, far )

Camera本身可以看作是一个点,left则表示左平面在左右方向上与Camera的距离。另外几个参数同理。于是六个参数分别定义了视景体六个面的位置。

可以近似地认为,视景体里的物体平行投影到近平面上,然后近平面上的图像被渲染到屏幕上。

2)透视投影相机

透视投影相机的视景体是个四棱台,它的构造函数是这样的:PerspectiveCamera( fov, aspect, near, far )

fov对应着图中的视角,是上下两面的夹角;aspect是近平面的宽高比;在加上近平面距离near,远平面距离far,就可以唯一确定这个视景体了。

因此,选择透视投影相机THREE.PerspectiveCamera,作为使用相机。

6.Objects

Three中供显示的物体有很多,它们都继承自Object3D类,这里我们主要看一下Mesh和Points两种。

1)Mesh

我们都知道,计算机的世界里,一条弧线是由有限个点构成的有限条线段连接得到的。线段很多时,看起来就是一条平滑的弧线了。

计算机中的三维模型也是类似的,普遍的做法是用三角形组成的网格来描述,我们把这种模型称之为Mesh模型。

这是那只著名的斯坦福兔子。它在3D图形中的地位与数字图像处理领域中著名的lena是类似的。

看这只兔子,随着三角形数量的增加,它的表面越来越平滑/准确。

在Three中,Mesh的构造函数是这样的:Mesh( geometry, material )

geometry是它的形状,material是它的材质。

不止是Mesh,创建很多物体都要用到这两个属性。下面我们来看看这两个重要的属性。

(1).Geometry

Geometry,形状,相当直观。Geometry通过存储模型用到的点集和点间关系(哪些点构成一个三角形)来达到描述物体形状的目的。

Three提供了立方体(其实是长方体)、平面(其实是长方形)、球体、圆形、圆柱、圆台等许多基本形状;

你也可以通过自己定义每个点的位置来构造形状;

对于比较复杂的形状,我们还可以通过外部的模型文件导入。

(2).Material

Material,材质,这就没有形状那么直观了。

材质其实是物体表面除了形状以为所有可视属性的集合,例如色彩、纹理、光滑度、透明度、反射率、折射率、发光度。

这里讲一下材质(Material)、贴图(Map)和纹理(Texture)的关系。

材质上面已经提到了,它包括了贴图以及其它。

贴图其实是‘贴'和‘图',它包括了图片和图片应当贴到什么位置。

纹理嘛,其实就是‘图'了。

Three提供了多种材质可供选择,能够自由地选择漫反射/镜面反射等材质。

2).Points

Points其实就是一堆点的集合,它在之前很长时间都被称为ParticleSystem(粒子系统),r68版本时更名为PointCloud,r72版本时才更名为Points。更名主要是因为,Mr.doob认为,粒子系统应当是包括粒子和相关的物理特性的处理的一套完整体系,而Three中的Points简单得多。因此最终这个类被命名为Points。

7.Light

光影效果是让画面丰富的重要因素。

Three提供了包括环境光AmbientLight、点光源PointLight、 聚光灯SpotLight、方向光DirectionalLight、半球光HemisphereLight等多种光源。

只要在场景中添加需要的光源就好了。

8.Renderer

在场景中建立了各种物体,也有了光,还有观察物体的相机,是时候把看到的东西渲染到屏幕上了。这就是Render做的事情了。

Renderer绑定一个canvas对象,并可以设置大小,默认背景颜色等属性。

调用Renderer的render函数,传入scene和camera,就可以把图像渲染到canvas中了。

相关文章

  • 3D机房实现探索(一)

    由于对WebGL的兴趣,初步接触Three.js,决定将学习过程进行记录,以便于后期复习。 初步以实现3D机房为目...

  • 3D机房实现探索(二)

    一、建立项目 准备工作完成后,使用用vs code建立项目,为搭建基本功能样式,结构如下图1: css文件夹:包括...

  • Three.js 操作3D模型经验总结

    一、概述 最近在调研组内3D机房可视化的实现,之前和大家分享过three.js的入门操作,通过three.js我们...

  • NOS跨分区灾备设计与实现

    本文来自网易云社区 作者:王健 摘要 NOS(网易对象存储)在实现多机房(杭州机房,北京机房等)部署后,允许一个用...

  • webpack+es2015+react+Ant Design纲

    最近TWaver 3D机房项目打算使用Ant Design来重构后端管理页面,Ant Design 团队不是很熟悉...

  • 扩展Ribbon-支持同集群优先

    实现优先调用统一集群的实例。 案例:为了容灾,我们将内容中心和用户中心都部署在了北京机房和南京机房,为了实现提升性...

  • 机房智能管控

    为了进一步加强对机房的智能化管理,本次对机房投入了一些智能小硬件,可实现对机房的远程视频监控,远程温湿度监控,远程...

  • 3D Touch

    iOS之实现3D Touch跟着官方文档学习3D Touch

  • css实现简单的3D效果

    css实现简单3D房间效果 纯3D效果实现上述效果,总体思路就是旋转容器,为容器贴纸。 这是一个简单的3D立方体空...

  • 3D探索

    今天大概看一下当前主流的3D库 常见的3D库 01|Egret官方将Egret定位为一整套游戏开发的“游戏解决方案...

网友评论

      本文标题:3D机房实现探索(一)

      本文链接:https://www.haomeiwen.com/subject/ysmonxtx.html