three 几何体(下)

190 阅读7分钟

在上一节中介绍了,立方体,胶囊体, 圆形体, 圆锥体, 圆柱体, 十二面缓冲几何体,的使用方法,在这一节将介绍边缘几何体, 挤压缓冲几何体, 二十面缓冲几何体,车削缓冲几何体,车削缓冲几何体, 车削缓冲几何体, 多面缓冲几何体, 圆环缓冲几何体, 形状缓冲几何体, 球缓冲几何体, 四面缓冲几何体, 圆环缓冲几何体, 圆环缓冲扭结几何体, 管道缓冲几何体, # 网格几何体 的基本使用方法。

EdgesGeometry 边缘几何体 这个API的作用主要将几何体转换成线条(边缘,通过角度控制是否显示某些线条) 有两个参数

  • geometry 几何体
  • thresholdAngle 显示线条的角度

代码示例

有哪些优点 能够用这个 API 调试模型检查形状, 与 mesh 或 lineSegMents 结合,使一个物体即能显示轮廓,又能显示实心面,主要能够通过线条使结构更清楚的展示以便发现潜在问题

// EdgesGeometry( geometry : BufferGeometry, thresholdAngle : Integer )
// 几何体角度小于 90 度的不显示 
new THREE.EdgesGeometry( geometry, 90 );

ExtrudeGeometry 挤压缓冲几何体 两个参数 该对象将一个二维形状挤出为一个三维几何体 有两个参数

  • shapes 包含形状的数组
  • options 一个包含众多参数的对象

使用示例 需要特别注意的三个参数 depth 形状拉深的距离 bevelEnabled 是否在拉深的顶部与底部启用斜角 extrudePath 这个能使形状实现曲线拉深

主要优点 能使二维快速的转换为三维模型, 可以与其他几何工具库 如SVG结合使用,直接从矢量图形生成三维模型,通过自定义路径挤出,制作动画效果,例如沿着路径运动,或形变,再比如可以通过这些API制作一个SVG转 3d 模型的功能 。。。

// ExtrudeGeometry(shapes : Array, options : Object);
options 包含以下参数
-   curveSegments — int,曲线上点的数量,默认值是12。
-   steps — int,用于沿着挤出样条的深度细分的点的数量,默认值为1。
-   depth — float,挤出的形状的深度,默认值为1。
-   bevelEnabled — bool,对挤出的形状应用是否斜角,默认值为true。
-   bevelThickness — float,设置原始形状上斜角的厚度。默认值为0.2。
-   bevelSize — float。斜角与原始形状轮廓之间的延伸距离,默认值为bevelThickness-0.1。
-   bevelOffset — float. Distance from the shape outline that the bevel starts. Default is 0.
-   bevelSegments — int。斜角的分段层数,默认值为3。
-   extrudePath — THREE.Curve对象。一条沿着被挤出形状的三维样条线。Bevels not supported for path extrusion. 
-   UVGeneratorObject。提供了UV生成器函数的对象。
// shape 形状数组  extrudeSettings 参数选项
 new THREE.ExtrudeGeometry( shape, extrudeSettings );

IcosahedronGeometry 二十面缓冲几何体 有两个参数

  • radius 几何体半径
  • detail 默认值为 0 值每增加一时会使几何体的面增加 四倍 例:0 时是20个面 为 1 时是 80 个面

代码示例

主要优点,在 three 中提人工了一个对称的,均衡的多面体模形,使得创建球形物体更方便快捷

// IcosahedronGeometry(radius : Float, detail : Integer)
// 使用示例 一个20个面的几何体
new THREE.IcosahedronGeometry(5, 0);

LatheGeometry 车削缓冲几何体 有五个参数

  • points 一个 Vector2 对象的数组 这些点连成一条线 通过 segments 将这些线分成多少个截面围成一个 按 phiLength 这个参数决定是否闭合的几何体
  • segments 要生成多少个 points 组成的面
  • phiStart 起始的角度
  • phiLength 默认值为 2 * Pi 通常被称为“θ”(西塔)使其成为一个完整的圆 代码示例

主要优点, 通过简单的二维轮郭旋转生成复杂的形状,为在 three 中创建对称线性几何体提供了灵活高效的方法

// LatheGeometry(points : Array, segments : Integer, phiStart : Float, phiLength : Float)
new THREE.LatheGeometry(points, 120)

OctahedronGeometry 八面缓冲几何体 有两个参数

  • radius 八面体的半径,默认值为1。
  • detail 这个值每递增 1 面的数量递增四倍,默认 8 个面

使用示例

主要优点 比二十面更简洁,更高效

// OctahedronGeometry(radius : Float, detail : Integer)
new THREE.OctahedronGeometry(5, 0)

PlaneGeometry 平面缓冲几何体 平面缓冲几何体 有四个参数

  • width 宽度
  • height 高度
  • widthSegments 平面宽度分段数
  • heightSegments 平面高度分段数

使用示例 一般这个用来做地板接收投影

主要优点 在 three 新建地面,墙面, 界面 是主要功能,也适用于各种平面或网格表面的场景

// PlaneGeometry(width : Float, height : Float, widthSegments : Integer, heightSegments : Integer)
new THREE.PlaneGeometry(400, 400)

PolyhedronGeometry 多面缓冲几何体 有四个参数

  • vertices 顶点数组
  • indices 构成面的索引
  • radius 开状的半径
  • detail 这个值每递增 1 面的数量递增四倍,默认为构成的面的数量

使用示例

主要优点 高度自定义,灵活性,支持材质和纹理

//  PolyhedronGeometry(vertices : Array, indices : Array, radius : Float, detail : Integer)
new THREE.PolyhedronGeometry(vertices, indices, 50, 0)

RingGeometry 圆环缓冲几何体 有六个参数

  • innerRadius 内部半径 中间空心的半径
  • outerRadius 外部半径 // 实体半径
  • thetaSegments 形状分段数 圆环分成多少个面
  • phiSegments 圆环半径分段数 每个页分成多少段 影晌粒度
  • thetaStart 起始角度 开始角度
  • thetaLength 默认值为 2 * Pi 通常被称为“θ”(西塔)使其成为一个完整的圆

使用示例

主要优点 适用于各种需要圆环或者边缘环线的多边形的场景

// RingGeometry(innerRadius : Float, outerRadius : Float, thetaSegments : Integer, phiSegments : Integer, thetaStart : Float, thetaLength : Float)
new THREE.RingGeometry( 1, 5, 32 );

ShapeGeometry 形状缓冲几何体 有两个参数

  • shapes 一个单独的形状
  • curveSegments 每一个形状的分段数 这个值越大越接近所绘制的形状

使用示例

主要优点 适用于将各种二维的线转换为二维的几何体,可以通过拉深将其转换为三维

// ShapeGeometry(shapes : Array, curveSegments : Integer)
new THREE.ShapeGeometry( heartShape );

SphereGeometry 球缓冲几何体

  • radius 球体半径 默认为 1
  • widthSegments 水平分段数,最小值为 3 ,类似于水平三角形
  • heightSegments 垂直分段数,最小值为 3 类似于垂直三角形
  • phiStart 水平的起始角度
  • phiLength 水平角度的大小 默认值为 Math.PI * 2
  • thetaStart 垂直的起始角度
  • thetaLength 垂直角度的大小 默认值为 Math.PI

代码示例

主要优点, 适用于天体建模 以及常见的球形几何体

// SphereGeometry(radius : Float, widthSegments : Integer, heightSegments : Integer, phiStart : Float, phiLength : Float, thetaStart : Float, thetaLength : Float)
new THREE.SphereGeometry( 15, 32, 16 );

TetrahedronGeometry 四面缓冲几何体 两个参数

  • radius 圆角半径
  • detail 这个值每递增 1 面的数量递增四倍,默认 4 个面

代码示例

主要优点 比八面几何体简洁,性能更优

// TetrahedronGeometry(radius : Float, detail : Integer)
// 半径为5的四面几何体
new THREE.TetrahedronGeometry(5, 0)

TorusGeometry 圆环缓冲几何体 有五个参数

  • radius 几何体半径
  • tube 管道的半径
  • radialSegments 横截面分段数 管道体平滑分为多少段
  • tubularSegments 管道的分段数 管道线分为多少段
  • arc 默认值为 2 * Pi 通常被称为“θ”(西塔)使其成为一个完整的圆

代码示例

主要优点 在 three 中制作环形 供提供基础模型

// TorusGeometry(radius : Float, tube : Float, radialSegments : Integer, tubularSegments : Integer, arc : Float)
new THREE.TorusGeometry( 10, 3, 16, 100 )

TorusKnotGeometry 圆环缓冲扭结几何体

  • radius 圆环的半径
  • tube 管道的半径
  • tubularSegments 管道的分段数量 管道线分为多少段
  • radialSegments 管道横截面分段数 管道体平滑分为多少段
  • p 这个值决定了几何体将绕着其旋转对称轴旋转多少次 默认值是2
  • q 这个值决定了几何体将绕着其内部圆环旋转多少次 默认值是3

代码示例

主要优点 创建复杂及精美的视觉效果

// TorusKnotGeometry(radius : Float, tube : Float, tubularSegments : Integer, radialSegments : Integer, p : Integer, q : Integer)
new THREE.TorusKnotGeometry( 10, 3, 100, 16 );

TubeGeometry 管道缓冲几何体 有五个参数

  • path 管道的路径
  • tubularSegments 组成这一管道的分段数 默认值为64
  • radius 管道的半径 默认值为1
  • radialSegments 管道横截面的分段数目,默认值为8
  • closed 管道的两端是否闭合,默认值为false。

代码示例

主要优点 在 three 中创建管道几何体

// TubeGeometry(path : Curve, tubularSegments : Integer, radius : Float, radialSegments : Integer, closed : Boolean)
new THREE.TubeGeometry( path, 20, 2, 8, false );

WireframeGeometry 网格几何体 将几何体转换为网格 只有一个参数

  • geometry 任意几何体对象

代码示例

主要优点 主要起到调试几何体的作用

// WireframeGeometry( geometry : BufferGeometry )
new THREE.WireframeGeometry( geometry );