@three3d/effect
Version:
@three3d/effect 提供了 ThreeJS 的特效
319 lines • 8.6 kB
TypeScript
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