UNPKG

@three3d/effect

Version:

@three3d/effect 提供了 ThreeJS 的特效

319 lines 8.6 kB
import { Curve, Vector3 } from "three"; import { type ComputeCurveFrenetFramesOptions, type IVector3, CreateLineConnectionOptions, LineConnectionType } from "@three3d/tools"; import { PathGeometry, type PathGeometryOptions } from "./PathGeometry"; import { PathData, PathItem } from "./tools"; import type { Point_Length_FrenetFrames, FrenetFrames } from "@three3d/tools"; export declare enum PathDrawType { /** * 以曲线的方式来绘制 */ curve = "curve", /** * 以折线的方式来绘制 */ polyline = "polyline", /** * 使用混合的方式来绘制 * @remarks * 会根据组成曲线的各个子曲线的具体类型来分别绘制各个子曲线 */ blend = "blend" } /** * BandGeometry的选项 */ export interface BandGeometryOptions extends PathGeometryOptions, CreateLineConnectionOptions, Omit<ComputeCurveFrenetFramesOptions, "closed"> { /** * 起点处的向上的方向 { x: 0, y: 1, z: 0 } * @defaultValue */ up?: IVector3; /** * uv的步长 * * @defaultValue 1 */ uvStep?: number; /** * CurvePath 的绘制类型 * @defaultValue BandDrawType.blend */ drawType?: PathDrawType; /** * 被视为转角的最小角度 */ minCorner?: number; } export interface CreateBandGeometryDataOptions extends Omit<BandGeometryOptions, "startLength" | "up"> { /** * 起点处的向上的方向 */ up: Vector3; /** * 上一个点的索引 * @remarks * 索引从哪里开始 */ preIndex?: number; /** * 上一个顶点 */ prePoint?: Vector3 | null; /** * 上一个点的长度 */ preLength?: number; /** * 是否拼接以前的索引 */ connectPre?: boolean | null; } /** * 根据曲线生成 BandGeometry 所需要的数据 * @param curve * @param options * @returns */ export declare function createCurveBandGeometryData(curve: Curve<Vector3>, options: CreateBandGeometryDataOptions): { position: number[]; normal: number[]; uv: number[]; index: number[]; color: number[]; lineDistance: number[]; lengths: number[]; points: Vector3[]; tangents: Vector3[]; normals: Vector3[]; binormals: Vector3[]; }; export type FrenetFramesOfCreateCurveBandGeometryData = FrenetFrames & { points: Vector3[]; length: number; }; export declare function createCurveBandGeometryDataByFrenetFrames(frenetFrames: FrenetFramesOfCreateCurveBandGeometryData, options: CreateBandGeometryDataOptions): { position: number[]; normal: number[]; uv: number[]; index: number[]; color: number[]; lineDistance: number[]; lengths: number[]; points: Vector3[]; tangents: Vector3[]; normals: Vector3[]; binormals: Vector3[]; }; /** * 根据折线生成 BandGeometry 所需要的数据 * @param points * @param options * @returns */ export declare function createPolylineBandGeometryData(points: Vector3[], options: CreateBandGeometryDataOptions): { position: number[]; normal: number[]; uv: number[]; color: number[]; index: number[]; lineDistance: number[]; length: number; lengths: number[]; points: Vector3[]; tangents: Vector3[]; normals: Vector3[]; binormals: Vector3[]; }; /** * 根据折线的 frenetFrames 生成 BandGeometry 所需要的数据 * @param points * @param options * @returns */ export declare function createPolylineBandGeometryDataByFrenetFrames(frenetFrames: Point_Length_FrenetFrames, options: CreateBandGeometryDataOptions): { position: number[]; normal: number[]; uv: number[]; color: number[]; index: number[]; lineDistance: number[]; length: number; lengths: number[]; points: Vector3[]; tangents: Vector3[]; normals: Vector3[]; binormals: Vector3[]; }; export type BandGeometryData = ReturnType<typeof createCurveBandGeometryData>; /** * 长度连接类型 */ export declare enum LengthConnectType { /** * 保持原样 */ intact = "intact", /** * 累加 */ add = "add", /** * 累加,并将间隔计算进去 */ addGap = "addGap" } /** * 连接两个 BandGeometryData * @param frontData * @param backData * @param options * @param lengthConnectType - 长度的连接类型 * @returns */ export declare function connectBandGeometryData(frontData: BandGeometryData, backData: BandGeometryData, options: CreateBandGeometryDataOptions, lengthConnectType?: LengthConnectType): { position: number[]; normal: number[]; uv: number[]; color: number[]; lineDistance: number[]; index: number[]; points: Vector3[]; lengths: number[]; length: number; tangents: Vector3[]; normals: Vector3[]; binormals: Vector3[]; }; /** * 根据 pathData 创建混合方式的 BandGeometry 所需要的数据 * @param pathData * @param options * @param preGeoData * @returns */ export declare function createBlendBandGeometryData(pathData: PathData, options: CreateBandGeometryDataOptions, preGeoData?: BandGeometryData | null): { position: number[]; normal: number[]; uv: number[]; index: number[]; color: number[]; lineDistance: number[]; lengths: number[]; points: Vector3[]; tangents: Vector3[]; normals: Vector3[]; binormals: Vector3[]; }; /** * 带状几何体 * @remarks * 可根据曲线、折线点来生成带状几何体; * 支持路径追加; * 支持设置起始长度 * 支持起始-终点颜色渐变 * 支持绘制的指定的长度区间 * 支持设置宽度 * 支持设置带状几何体起始位置处的向上方向 */ export declare class BandGeometry extends PathGeometry<BandGeometryOptions> { readonly isBandGeometry = true; static options: BandGeometryOptions; constructor(options?: BandGeometryOptions); /** * 起点处的向上的方向 { x: 0, y: 1, z: 0 } * @defaultValue */ get up(): IVector3; set up(value: IVector3); /** * 是否固定 up;保证up不变 * @defaultValue false */ get fixUp(): boolean; set fixUp(value: boolean); /** * 是否固定 up;保证up不变 * @defaultValue false */ get useU(): boolean; set useU(value: boolean); /** * uv的步长 * * @defaultValue 1 */ get uvStep(): number; set uvStep(value: number); /** * CurvePath 的绘制类型 * @defaultValue BandDrawType.blend */ get drawType(): PathDrawType; set drawType(value: PathDrawType); /** * 线的衔接类型 * @defaultValue LineConnectionType.round */ get connectionType(): LineConnectionType; set connectionType(value: LineConnectionType); /** * 圆形衔接角的长度步长 * @remarks * 与 smoothStepAngle 作用相同 * smoothStepAngle 的优先级高于 smoothStepLength */ get smoothStepLength(): number | undefined; set smoothStepLength(value: number | undefined); /** * 圆形衔接角的步长角 * @remarks * 与 smoothStepLength 作用相同 * smoothStepAngle 的优先级高于 smoothStepLength * @defaultValue LineConnectionType.round */ get smoothStepAngle(): number | undefined; set smoothStepAngle(value: number | undefined); append(pathItem: PathItem): void; updateGeometry(): void; /** * 几何体的数据 */ get geometryData(): { position: number[]; normal: number[]; uv: number[]; index: number[]; color: number[]; lineDistance: number[]; lengths: number[]; points: Vector3[]; tangents: Vector3[]; normals: Vector3[]; binormals: Vector3[]; } | null; /** * 未闭合的几何体的数据 */ get openedGeometryData(): BandGeometryData | null; frenetFrames: Point_Length_FrenetFrames | null; /** * 重围所有的 Attributes * @param attrs */ resetAttributes(attrs: BandGeometryData): void; /** * 获取顶点索引对应的分段索引 * @remarks * 分段指的是沿路径的方向上的分段 * @param vertexIndex * @returns */ getDivisionIndex(vertexIndex: number): number; /** * 设置绘制的长度范围 * @param startLength * @param endLength */ setDrawLength(startLength: number, endLength?: number | null): void; } //# sourceMappingURL=BandGeometry.d.ts.map