threejs几何体
前面在场景那节只是简单介绍了threejs中可用的几何体,本节和下一节将深入讨论threejs提供的所有几何体(不包括上一节探讨过的THREE.Line)。
二维几何体
THREE.PlaneGeometry
它可以用来创建一个非常简单的二维矩形。
| 属性 | 描述 |
|---|---|
| width(宽度) | 指定矩形宽度 |
| height(高度) | 指定矩形高度 |
| widthSegments(宽度段数) | 指定矩形宽度应该划分为几段,默认为1 |
| heightSegments(高度段数) | 指定矩形高度应该划分为几段,默认为1 |
1 | <!-- chapter-05-01.html --> |

THREE.CircleGeometry
它可以创建一个非常简单的二维圆(或部分圆)。
| 属性 | 描述 |
|---|---|
| radius | 设置圆的半径,默认为50 |
| segments | 设置创建圆所用面的数量,最小值是3,默认是8。值越大,圆越光滑 |
| thetaStart | 设置从哪里开始画圆,取值范围是0到2*PI, 默认为0 |
| thetaLength | 设置圆画的弧度,默认是2*PI(整圆) |
1 | <!-- chapter-05-02.html --> |

THREE.RingGeometry
它和上面圆类似,但它可以在中心定义一个孔。
| 属性 | 描述 |
|---|---|
| innerRadius | 圆环的内半径,它定义中心圆孔的尺寸。如果设置为0,则不会显示圆孔。默认值为0 |
| outerRadius | 圆环的外半径,它定义圆环的尺寸。默认值为50 |
| thetaSegments | 指定圆环的对角线段数量,越大则圆环更平滑。默认为8 |
| phiSegments | 指定沿着圆环的长度所需要使用的线段数量。默认为8。它不会影响圆的平滑度,只会增加面的数量 |
| thetaStart | 指定从哪里开始画圆 |
| thetaLength | 指定画圆的弧度大小 |
1 | <!-- chapter-05-03.html --> |

THREE.ShapeGeometry
它可以自定义二维图形。
先来看看THREE.ShapeGeometry方法的参数:

上面传入参数最重要的就是shapes,THREE.Shape对象的创建。它可以用来创建图形,所以下面介绍它的绘图函数。

THREE.Shape对象的一些辅助函数:

1 | <!-- chapter-05-04.html --> |

三维几何体
THREE.BoxGeometry
这是一个非常简单的三维几何体,只需要指定宽、高和深度就可以创建一个长方体。
| 属性 | 描述 |
|---|---|
| width | 指定长方体的宽度 |
| height | 指定长方体的高度 |
| depth | 指定长方体的深度 |
| widthSegments | 指定宽分成多少份,默认值为1 |
| heightSegments | 指定高分成多少份,默认值为1 |
| depthSegments | 指定深度分成多少份,默认值为1 |
1 | <!-- chapter-05-05.html --> |

THREE.SphereGeometry
它可以创建一个三维的球体。这个几何体非常灵活,可以用来创建所有跟球体相关的几何体。通过下面这些属性调节球体相关几何体网格的外观:
| 属性 | 描述 |
|---|---|
| radius | 设置球体的半径,默认值为50 |
| widthSegments | 球体竖直方向分段数,值越大,球体表面越光滑。默认值为8,最小值为3 |
| heightSegments | 水平方向分段数,同上 |
| phiStart | 指定从x轴的什么地方开始绘制球体 |
| phiLength | 指定从phiStart开始画多少弧度 |
| thetaStart | 指定从y轴的什么地方开始绘制球体 |
| thetaLength | 指定从phetaStart开始画多少弧度 |
1 | <!-- chapter-05-06.html --> |

THREE.CylinderGeometry
它可以创建圆柱和类似圆柱的物体。
| 属性 | 描述 |
|---|---|
| radiusTop | 设置圆柱顶部的尺寸,默认值为20 |
| radiusBottom | 设置圆柱底部的尺寸,默认值为20 |
| height | 设置圆柱的高度,默认值为100 |
| radialSegments | 设置沿半径分为多少段。默认值为8,值越大越光滑 |
| heightSegments | 设置沿高度分成多少段。默认值为1,值越大面越多 |
| openEnded | 设置网格顶部和底部是否封闭。默认为false |
1 | <!-- chapter-05-07.html --> |

把顶部或底部设置为负数的半径,可以创建一个类似沙漏的图形。

THREE.TorusGeometry
它可以创建圆环。

1 | <!-- chapter-05-08.html --> |

THREE.TorusKnotGeometry
它可以创建一个环状扭结,看起来像一根管子绕自己转了几圈。

1 | <!-- chapter-05-09.html --> |

THREE.PolyhedronGeometry
它可以很容易的创建多面体,它是只有平面和直边的几何体。大多数情况下,你不需要直接使用这种几何体,Threejs提供了几种特定的多面体可以直接使用,而不必自己去指定THREE.PolyhedronGeometry的顶点和面。
THREE.PolyhedronGeometry属性:
| 属性 | 描述 |
|---|---|
| vertices | 设置构成多面体的顶点 |
| indices | 设置由vertices创建出的面 |
| radius | 设置多面体的大小,默认值为1 |
| detail | 如果设置为1,这个多面体每个三角形都会分成4个小三角形,如果设置为2,那4个小三角形中每一个将会继续分成4个小三角形,以此类推 |
下面是Threejs提供的几个开箱即用的多面体:
- THREE.lcosahedronGeometry 20面体
- THREE.TetrahedronGeometry 4面体
- THREE.OctahedronGeometry 8面体
- THREE.DodecahedronGeometry 12面体
1 | <!-- chapter-05-10.html --> |
