從去年開始就在計劃中的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>