我是三个JS的新手,在其中我研究了所有主题,例如相机,渲染器,场景和几何。穿过几何体的地方有几何体和缓冲区几何体(例如锥孔缓冲几何和锥孔几何),两者的特征相同。那么几何图形和缓冲区几何图形之间的区别是什么?这会影响性能还是影响
答案 0 :(得分:3)
本质上的区别在于基础数据结构(几何结构如何在内存中存储和处理顶点,面等)。
出于学习目的,您不必关心它,只需使用ConeGeometry,直到遇到性能问题。然后再次进入主题,下一次您将更加准备去了解两者之间的区别。
网格,线或点几何的有效表示。包括 顶点位置,面索引,法线,颜色,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