BufferGeometry和Geometry有什么不一样

BufferGeometry和Geometry有什么不一样

若是你刚接触Three.js,查看文档的时候,经过BoxBufferGeometrySphereBufferGeometry能够分别用来建立长方体、球体,一样经过BoxGeometrySphereGeometry也能够用来分别建立长方体、球体。BoxBufferGeometrySphereBufferGeometry等Three.js API的基类是BufferGeometry,BoxGeometrySphereGeometry等Three.js API的基类是Geometryhtml

测试代码你会发现BufferGeometryGeometry能够实现一样的功能,这时候你可能至少会思考它们会有什么不一样,简单的点说BufferGeometryGeometry对象的数据结构不一样,可是均可以用来描述几何体的顶点信息。程序员

学习建议

我的WebGL/Three.js技术博客浏览器

若是你想简单理解BufferGeometry和Geometry有什么不一样,就是二者的数据结构不一样,缓冲类型几何体BufferGeometry相比普通几何体Geometry性能更好。数据结构

若是想深刻理解,建议先有必定的原生WebGL基础,能够学习本博客的原生WebGL视频教程,另外一方面能够学习Three.js视频教程中第2章对BufferGeometryGeometry的详细介绍。函数

顶点概念

若是你想深刻理解BufferGeometryGeometry到底有什么不一样,你至少要对几何体的顶点数据要有必定概念,好比顶点位置、顶点法向量、顶点颜色、顶点纹理坐标UV等数据,若是你有必定原生WebGL基础,对这些确定是了解的。性能

不管是缓冲类型几何体对象BufferGeometry仍是普通几何体对象Geometry,它们本质上都是用来描述一个几何体顶点数据的对象,经过不用的属性来表示不一样的顶点数据,这些构造函数也封装了一些相关方法。学习

数据结构

有了顶点的概念,你在浏览器的控制台打印查看BufferGeometryGeometry对象有哪些属性,这些属性的属性值分别表示顶点的什么数据。测试

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可能对程序员更友好一些。视频

相关文章
相关标签/搜索