BufferGeometry 和 Geometry 有什么不同?

发布于 2021-10-20 21:50:14 字数 2269 浏览 1385 评论 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技术交流群

发布评论

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

关于作者

瑾兮

暂无简介

文章
评论
21358 人气
更多

推荐作者

微信用户

文章 0 评论 0

小情绪

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

笨死的猪

文章 0 评论 0

彭明超

文章 0 评论 0

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