缓冲区几何和几何之间的区别

时间:2019-02-13 15:04:08

标签: three.js

我是三个JS的新手,在其中我研究了所有主题,例如相机,渲染器,场景和几何。穿过几何体的地方有几何体和缓冲区几何体(例如锥孔缓冲几何和锥孔几何),两者的特征相同。那么几何图形和缓冲区几何图形之间的区别是什么?这会影响性能还是影响

2 个答案:

答案 0 :(得分:3)

本质上的区别在于基础数据结构(几何结构如何在内存中存储和处理顶点,面等)。

出于学习目的,您不必关心它,只需使用ConeGeometry,直到遇到性能问题。然后再次进入主题,下一次您将更加准备去了解两者之间的区别。

请检查BufferGeometry

  

网格,线或点几何的有效表示。包括   顶点位置,面索引,法线,颜色,UV和自定义   缓冲区中的属性,减少了传递所有这些数据的成本   到GPU。

     

要读取和编辑BufferGeometry属性中的数据,请参见   BufferAttribute documentation

     

有关几何的效率较低但更易于使用的表示形式,请参见   几何。

在另一边Geometry

  

Geometry是BufferGeometry的一种用户友好替代方法。几何形状   使用对象存储属性(顶点位置,面,颜色等)   如Vector3或Color,它们更易于阅读和编辑,但更少   比类型数组有效。

     

对于大型或严肃的项目,最好使用BufferGeometry。

BufferGeometry性能在这里进行了解释:why-is-the-geometry-faster-than-buffergeometry

答案 1 :(得分:2)

最终将几何转换为缓冲几何,因此,如果您没有任何性能问题,请在方便的情况下坚持使用几何。

在这里您可以看到ConeGeometry调用CylinderGeometry构造函数。

CylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );

https://github.com/mrdoob/three.js/blob/dev/src/geometries/ConeGeometry.js

然后使用CylinderBufferGeometry创建CylinderGeometry。

this.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );

https://github.com/mrdoob/three.js/blob/dev/src/geometries/CylinderGeometry.js