若是你剛接觸Three.js,查看文檔的時候,經過BoxBufferGeometry
、SphereBufferGeometry
能夠分別用來建立長方體、球體,一樣經過BoxGeometry
、SphereGeometry
也能夠用來分別建立長方體、球體。BoxBufferGeometry
、SphereBufferGeometry
等Three.js API的基類是BufferGeometry
,BoxGeometry
、SphereGeometry
等Three.js API的基類是Geometry
。html
測試代碼你會發現BufferGeometry
和Geometry
能夠實現一樣的功能,這時候你可能至少會思考它們會有什麼不一樣,簡單的點說BufferGeometry
和Geometry
對象的數據結構不一樣,可是均可以用來描述幾何體的頂點信息。程序員
若是你想簡單理解BufferGeometry和Geometry有什麼不一樣,就是二者的數據結構不一樣,緩衝類型幾何體BufferGeometry
相比普通幾何體Geometry
性能更好。數據結構
若是想深刻理解,建議先有必定的原生WebGL基礎,能夠學習本博客的原生WebGL視頻教程,另外一方面能夠學習Three.js視頻教程中第2章對BufferGeometry
和Geometry
的詳細介紹。函數
若是你想深刻理解BufferGeometry
和Geometry
到底有什麼不一樣,你至少要對幾何體的頂點數據要有必定概念,好比頂點位置、頂點法向量、頂點顏色、頂點紋理座標UV等數據,若是你有必定原生WebGL基礎,對這些確定是瞭解的。性能
不管是緩衝類型幾何體對象BufferGeometry
仍是普通幾何體對象Geometry
,它們本質上都是用來描述一個幾何體頂點數據的對象,經過不用的屬性來表示不一樣的頂點數據,這些構造函數也封裝了一些相關方法。學習
有了頂點的概念,你在瀏覽器的控制檯打印查看BufferGeometry
和Geometry
對象有哪些屬性,這些屬性的屬性值分別表示頂點的什麼數據。測試
var geometry = new THREE.BoxGeometry(10, 8, 9); console.log('幾何體數據結構',geometry); console.log('頂點位置數據',geometry.vertices); console.log('頂點紋理座標',geometry.faceVertexUvs); console.log('幾何體三角形信息',geometry.faces);
var geometry = new THREE.BoxBufferGeometry(7, 6, 8); console.log('幾何體數據結構',geometry); console.log('頂點位置、法向量、UV、顏色頂點等數據集合',geometry.attributes); console.log('頂點位置數據',geometry.attributes.position); console.log('頂點索引數據',geometry.index);
在執行WebGL渲染器WebGLRenderer
渲染方法.render()
的時候,渲染器會對場景和相機進行解析渲染,解析場景Scene天然會解析場景中模型對應的幾何體對象Geometry。關於渲染器是如何解析渲染場景和相機對象的,在《Three.js進階視頻教程》中進行了介紹和講解,有興趣能夠詳細瞭解,這裏再也不展開詳述,這裏只說和幾何體相關的內容。code
Three.js渲染器在解析幾何體對象的時候,若是幾何體對象是普通幾何體對象Geometry
,Three.js的WebGL渲染器會把普通幾何體對象Geometry
轉化爲緩衝類型幾何體對象BufferGeometry
,而後再提取BufferGeometry
包含的頂點信息,這裏能夠看出來直接使用BufferGeometry
解析的時候相對Geometry
少了一步,天然性能更高一些。不過從開發者使用的角度來看,Geometry
可能對程序員更友好一些。視頻