` WebGL1.0標準2011年發佈以來,至今天2017年,通過了大約6年。如今多數瀏覽器最新版本已經可以支持WebGL1.0標準,包括移動端瀏覽器。貧道喜歡把團隊用SolidWorks軟件設計的機械零件在我的網站解析出來,工程師之間能夠隨時隨地用手機瀏覽器訪問網站,打開零件相互交流,對外交流展現更加方便。貧道相信其它各個領域都有用到WebGL的項目,好比國內大型電商平臺推動商品在線3D預覽顯示計劃,3D效果的展現要比一張圖片體驗好得多;遊戲行業但願在線部署遊戲,相比須要下載的遊戲更加有利於推廣;房地產、酒店、商場領域但願能夠經過網頁在線展現室內效果,CAD開發公司但願能夠利用WebGL技術實如今線進行三維建模。除了特定領域的工程應用外,也有不少的計算機圖形學學習者但願用網頁在線展現本身的做品、算法,相比客戶端使用OpenGL開發的做品而言,使用WebGL技術實現的做品只須要給他人發送一個連接便可。事實上,愈來愈多的軟件應用搬上了網頁,瀏覽器的做用不只僅用來展現網頁內容,而是做爲一個平臺。不論學習WebGL仍是學習OpenGL,其實都是學習計算機圖形學及其延伸應用,WebGL對應的是瀏覽器平臺,OpenGL對應的是操做系統平臺。javascript
相比瀏覽器對WebGL的支持而言,WebGL缺乏的是普及問題,人才需求遠遠大於人才供應。俗話說隔行如隔山,WebGL目前的普及慢,除了圖形學比較難之外,也有這方面問題。WebGL前三個字母體現的是互聯網平臺、瀏覽器頁面,後兩個字母體現的是計算機圖形學。瞭解前端的工程師,每每不瞭解圖形學,瞭解圖形學的每每又不瞭解網站開發,網頁設計。關於圖形學的學習資料每每都是使用C或C++語言編寫,基於操做系統平臺。html
由於學員的基礎、行業多樣化分佈,所以本系列WebGL教程儘可能照顧不一樣基礎、不一樣領域的人,對於前端工程師,教程爲把圖形學的知識系統講解,對於已經瞭解圖形學的學習者,教程會講解相關的網頁設計知識,只要有必定的編程能力就行。在實際的WebGL項目中,除了圖形學自己而言,也要學習交互界面設計,經過HTML和CSS能夠完成界面的設計,經過WebGL API、着色器語言GLSL ES和Javascript語言,能夠完成圖形學部分的開發。若是你已經熟練使用HTML、CSS和Javascript語言,你只須要學習WebGL的API和GLSL ES語言,着色器語言GLSL ES相似C語言,運行在GPU上,對於多數學習過C語言的人來講並不難。對於有OpenGL基礎的人而言,WebGL API只不過是OpenGL API子集的子集,更多學習的是如何過渡到互聯網的生態環境下,在網頁上設計應用的GUI要比操做系統平臺方便的多,直接使用超文本語言HTML便可。 `前端
WebGL完美地解決了現有的Web交互式三維動畫的兩個問題:第一,它經過HTML腳本自己實現Web交互式三維動畫的製做,無需任何瀏覽器插件支持;第二,它利用底層的圖形硬件加速功能進行的圖形渲染,是經過統一的、標準的、跨平臺的OpenGL接口實現的。
java
WebGL(全寫Web Graphics Library)是一種3D繪圖協議,這種繪圖技術標準容許把JavaScript和OpenGL ES 2.0結合在一塊兒,經過增長OpenGL ES 2.0的一個JavaScript綁定,WebGL能夠爲HTML5 Canvas提供硬件3D加速渲染,這樣Web開發人員就能夠藉助系統顯卡來在瀏覽器裏更流暢地展現3D場景和模型了,還能建立複雜的導航和數據視覺化。顯然,WebGL技術標準免去了開發網頁專用渲染插件的麻煩,可被用於建立具備複雜3D結構的網站頁面,甚至能夠用來設計3D網頁遊戲等等。
node
Three.js是一款開源的主流3D繪圖JS引擎(名字Three就是3D的含義),原做者爲Mr.Doob,項目地址爲:https://github.com/mrdoob/three.js/。 咱們知道WebGL是一種網頁3D繪圖標準,和jQuery簡化了HTML DOM操做同樣,Three.js能夠簡化WebGL編程。 WebGL是HTML5技術生態鏈中最爲使人振奮的標準之一,把Web帶入3D的時代,對WebGL沒有概念的請閱讀本站相關入門教程。
git
The aim of the project is to create an easy to use, lightweight, 3D library with a default WebGL renderer. The library also provides Canvas 2D, SVG and CSS3D renderers in the examples.github
Examples — Documentation — Wiki — Migrating — Questions — Forum — Slack — Discordweb
This code creates a scene, a camera, and a geometric cube, and it adds the cube to the scene. It then creates a WebGL
renderer for the scene and camera, and it adds that viewport to the document.body
element. Finally, it animates the cube within the scene for the camera.算法
import * as THREE from './js/three.module.js'; let camera, scene, renderer; let geometry, material, mesh; init(); function init() { camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.01, 10 ); camera.position.z = 1; scene = new THREE.Scene(); geometry = new THREE.BoxGeometry( 0.2, 0.2, 0.2 ); material = new THREE.MeshNormalMaterial(); mesh = new THREE.Mesh( geometry, material ); scene.add( mesh ); renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animation ); document.body.appendChild( renderer.domElement ); } function animation( time ) { mesh.rotation.x = time / 2000; mesh.rotation.y = time / 1000; renderer.render( scene, camera ); }
If everything went well, you should see this.apache
Cloning the repo with all its history results in a ~2GB download. If you don't need the whole history you can use the depth
parameter to significantly reduce download size.
git clone --depth=1 https://github.com/mrdoob/three.js.git