Web3D|基于WebGL的Three.js框架|入门篇

Posted AngryRED

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web3D|基于WebGL的Three.js框架|入门篇相关的知识,希望对你有一定的参考价值。



前段时间,由于项目的需要,学习了一下用javascript实现的WebGL开源框架three.js。看到官网上非常酷炫的3D演示,着实让人心动不已!

Web3D|基于WebGL的Three.js框架|入门篇


从Hello World说起

还是依旧,我们通过一段小小的示例,来看看怎么使用three.js框架。

Web3D|基于WebGL的Three.js框架|入门篇


var camera, scene, controls, renderer;
init();
animate();
function init() {
// camera
camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.01, 10000);
camera.position.set(0, 50, 500);

// scene
scene = new THREE.Scene();
scene.background = new THREE.Color(0xf0f0f0);

// light
var light = new THREE.DirectionalLight(0xffffff);
light.position.set(0, 0, 1);
scene.add(light);

//Add a Cube
var cube = new THREE.Mesh(new THREE.BoxGeometry(50, 100, 20), new THREE.MeshBasicMaterial({color: 0xff0000}));
cube.name = "Cube";
cube.rotation.y = Math.PI / 4;
cube.rotation.z = Math.PI / 4;
scene.add(cube);
// renderer
renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
}
function animate() {
renderer.render(scene, camera);
requestAnimationFrame(animate);
}

组件介绍

通过上面的Demo可以看到,three.js的创建有以下几部分组成:

  • 渲染器(Renderer)

  • 场景(Scene)

  • 相机(Camera)

  • 光源(Lights)

  • 物体(Mesh)

一. 渲染器(Renderer)

是一个html DOM元素,将会被嵌入到HTML页面中,它会通过循环调用animate()方法来渲染场景(Scene)和相机(Camera)。

renderer.render(scene, camera);

二. 场景(Scene)

场景(Scene)是所有渲染的3D元素的根元素,也就是一个三维空间,所有的图形,光源及辅助工具都需要加入其中。

三. 相机(Camera)

相机(Camera)用来控制三维空间中物体的投影,以及我们在屏幕上看到的内容。一般情况下分为两种:

  • 透视投影THREE.PerspectiveCamera,遵循近大远小规则,跟现实生活中我们看物体的方式是一样的。

Web3D|基于WebGL的Three.js框架|入门篇


  • 正投影THREE.OrthographicCamera,不论远近,按照统一的大小进行投影。


另外,Camera中的坐标系统也与我们平时编程中的屏幕坐标系统不一样,它用的是右手坐标系统(几何中的坐标系)。


四. 光源(Lights)

光源(Lights)是3D中一个很重要的概念,和现实世界一样,同样的物体,在不同的光源照射下,呈现的效果也不一样,比如自然光,灯泡,LED灯照射后物体的颜色也会有很大的不同。three.js中,光源大致分为8种:

  • AmbientLight: 环境光 ;它的颜色会添加到整个场景和所有对象的当前颜色上

  • PointLight: 点光源;空间中的一点,朝所有的方向发射光线

  • SpotLight: 聚光灯光源;聚光灯是由点光源发出,这种类型的光也可以产生投影,有聚光的效果

  • DirectionalLight:方向光,平行光;例如:太阳光

  • HemisphereLight:半球光光源 ;可以为室内场景创建更加自然的光照效果,模拟反光面和光线微弱的天气

  • AreaLight:面光源; 使用这种光源可以指定散发光线的平面,而不是空间的一个点

  • RectAreaLight:矩形区域光源;这种光从一个矩形面均匀地发射,可以用来模拟明亮的窗户或者带状的照明;可以产生投影

  • LensFlare:镜头炫光;这不是一种光源,但是通过该炫光可以为场景中的光源添加炫目的效果

五. 物体(Mesh)

物体(Mesh)才是我们最终要展现给用户的3D形状,如长方体,球体等。它有两个重要的组成部分:

  • 形状(Geometry):3D的各种形状

  • 材质(Material):物体表面的渲染方式,包括颜色,与光源的交互等。

小结

Three.js作为实现了WebGL的优秀的开源框架,其功能已经是比较丰富和完善了。但是对于一些初次接触3D的人,肯定会被里面的各种概念搅的天翻地覆。只要理清楚了上面所说的这些基本概念,我相信你也能很快入门。


以上是关于Web3D|基于WebGL的Three.js框架|入门篇的主要内容,如果未能解决你的问题,请参考以下文章

开源Gio.js:一个基于 Three.js 的 Web3D 地球数据可视化库

Three.js 入门指南

在移动设备上支持 Canvas 和 WebGL (three.js)?

Cesium开发工具篇 | 05与第三方库的集成

[webGL学习技术分享]基于three.js构建WebGL实例

[webGL学习技术分享]基于three.js构建WebGL实例