从去年开始就在计划中的three.js终于开始了javascript
(摘自ijunfan1994的转载,感谢做者)
OpenGL大概许多人都有所耳闻,它是最经常使用的跨平台图形库。
WebGL是基于OpenGL设计的面向web的图形标准,提供了一系列JavaScript API,经过这些API进行图形渲染将得以利用图形硬件从而得到较高性能。
而Three.js是经过对WebGL接口的封装与简化而造成的一个易用的图形库。
简单点的说法:WebGL能够当作是浏览器给咱们提供的接口,在javascript中能够直接用这些API进行3D图形的绘制;而Three.js就是在这些接口上又帮咱们封装得更好用一些。html
(摘自ijunfan1994的转载,感谢做者)
既然有了WebGL,咱们为何还须要Three.js?
这是由于WebGL门槛相对较高,须要相对较多的数学知识。虽然WebGL提供的是面向前端的API,但本质上WebGL跟前端开发彻底是两个不一样的方向,知识的重叠不多。相关性只是他们都在web平台上,都是用javascript而已。一个前端程序员或许还熟悉解析几何,可是还熟悉线性代数的应该寥寥无几了(好比求个逆转置矩阵试试?),更况且使用中强调矩阵运算中的物理意义,这在教学中也是比较缺失的。
所以,前端工程师想要短期上手WebGL仍是挺有难度的。
因而,Three.js对WebGL提供的接口进行了很是好的封装,简化了不少细节,大大下降了学习成本。而且,几乎没有损失WebGL的灵活性。
所以,从Three.js入手是值得推荐的,这可让你在较短的学习后就能面对大部分需求场景。(Three.js的更新是至关频繁)前端
咱们要在屏幕上展现一个3D图形,大致的思路是这样的:java
在fiddle中查看效果程序员
<html> <head> <title>My first Three.js app</title> <style> body { margin: 0; } canvas { width: 100%; height: 100% } </style> </head> <body> <script src="//wow.techbrood.com/libs/three.r73.js"></script> <script> //建立场景 var scene = new THREE.Scene(); // 建立透视投影相机,PerspectiveCamera( fov, aspect, near, far ) // fov:相机视锥体垂直视角,aspect:相机视锥体宽高比 // near:相机视锥体近裁剪面距离,far:相机视锥体远裁剪面距离。 var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 ); // 建立一个webGL渲染器 var renderer = new THREE.WebGLRenderer(); // 设置渲染器大小 renderer.setSize( window.innerWidth, window.innerHeight ); // 将渲染出来的canvas加入到body中 document.body.appendChild( renderer.domElement ); // 建立形状 var geometry = new THREE.BoxGeometry( 1, 1, 1 ); // 建立材质 var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } ); // 合成图形 var cube = new THREE.Mesh( geometry, material ); // 添加到场景中 scene.add( cube ); // 设置相机位置 camera.position.z = 5; // 渲染函数 var render = function () { requestAnimationFrame( render ); cube.rotation.x += 0.1; cube.rotation.y += 0.1; renderer.render(scene, camera); }; render(); </script> </body> </html>