我正在研究三种构建SphereGeometry的方法,我看到它使用了SphereBufferGeometry()函数。
我试着去理解它为什么会产生这样的顶点数目。例如,如果我指定球体有4个宽度段和4个高度段,那么三个球将定义25个顶点。
一个草图表明“球面”应该有4+8+8+4=24独立的三角形,如果每个三角形有3个未共享的顶点,我们总共得到72个“虚拟”顶点。但是,如果我们在多个三角形之间共享每个顶点,那么就会有1+4+4+4+1= 14“实”顶点。
在代码中有一行:-
var vertexCount = ( ( widthSegments + 1 ) * ( heightSegments + 1 ) );因此,这将解释顶点的数目(4+1)*(4+1)=25来自何处。这个数字(vertexCount)也决定了创建的位置、法线和超视距的数量。但是为什么需要这么多(25个)顶点呢?既然三种方法是使用索引来跨多个三角形共享顶点,那么为什么不创建14个“真实的”顶点呢?
编辑
实际上,(wS+1)*(hS+1) vertexCount公式在试图通过对每个顶点应用随机标量来变形球体时给我带来了一个问题。如果只有14个“真实”顶点,就没有问题了。但是对于25个顶点,我需要知道哪个虚拟顶点与同一个实顶点相关,这样所有的虚拟顶点都可以被分配到相同的标量值。否则,在相邻的三角形之间会出现空间间隙。
更新
看看韦斯特兰利的答案。
还请注意,(4x4大小) SphereBufferGeometry的索引有72个元素,它们对应于72个“虚拟”顶点。每个元素指向对应的1(25中)缓冲顶点.因此,如果需要,可以使用索引(在代码中)从SphereBufferGeometry读取所有72个“虚拟”顶点(实际上所有72*3 =216个顶点位置坐标)到一个新的初始空“平面”自定义缓冲区。
发布于 2016-03-23 15:57:28
SphereGeometry是被“索引”的BufferGeometry --顶点可以在两面之间共享。
之所以需要额外的顶点是因为接缝。
球体的一侧有一条缝,南北两极都有一条缝。
每个接缝都需要重复的顶点,因为UV沿接缝变化。
每个顶点可以有任意数量的属性,但如果同一位置的两个顶点至少有一个不同的属性,则必须重复这些顶点。
three.js r.143
https://stackoverflow.com/questions/36179507
复制相似问题