BufferGeometry 和 Geometry 有什么不同?

发布于 2021-10-20 21:50:14 字数 2269 浏览 1360 评论 0

如果你刚接触 Three.js,查看文档的时候,通过 BoxBufferGeometrySphereBufferGeometry 可以分别用来创建长方体、球体,同样通过 BoxGeometrySphereGeometry也可以用来分别创建长方体、球体。BoxBufferGeometrySphereBufferGeometry等Three.js API的基类是BufferGeometry,BoxGeometrySphereGeometry等Three.js API的基类是Geometry

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

学习建议

如果你想简单理解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渲染器在解析几何体对象的时候,如果几何体对象是普通几何体对象 Geometry,Three.js 的 WebGL 渲染器会把普通几何体对象 Geometry转化为缓冲类型几何体对象BufferGeometry,然后再提取 BufferGeometry 包含的顶点信息,这里可以看出来直接使用 BufferGeometry 解析的时候相对 Geometry 少了一步,自然性能更高一些。不过从开发者使用的角度来看,Geometry可能对程序员更友好一些。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

瑾兮

暂无简介

0 文章
0 评论
21355 人气
更多

推荐作者

挽容

文章 0 评论 0

女中豪杰

文章 0 评论 0

吻安

文章 0 评论 0

cassie

文章 0 评论 0

JinFeng

文章 0 评论 0

undefined

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文