threepipe
Version:
A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.
96 lines (89 loc) • 2.64 kB
text/typescript
import {
AdditiveBlending,
AnyMapping,
BasicDepthPacking,
Blending,
ByteType,
ColorSpace,
CubeReflectionMapping,
CubeUVReflectionMapping,
CustomBlending,
DepthPackingStrategies,
DisplayP3ColorSpace,
EquirectangularReflectionMapping,
FloatType,
HalfFloatType,
IntType,
LinearSRGBColorSpace,
MultiplyBlending,
NoBlending,
NormalBlending,
RGBADepthPacking,
RGBM16ColorSpace,
ShortType,
SRGBColorSpace,
SubtractiveBlending,
TextureDataType,
UnsignedByteType,
UnsignedInt248Type,
UnsignedIntType,
UnsignedShort4444Type,
UnsignedShort5551Type,
UnsignedShortType,
UVMapping,
} from 'three'
import {UiObjectConfig} from 'uiconfig.js'
const blending: Record<string, Blending> = {
None: NoBlending,
Normal: NormalBlending,
Additive: AdditiveBlending,
Subtractive: SubtractiveBlending,
Multiply: MultiplyBlending,
Custom: CustomBlending,
}
const mapping: Record<string, AnyMapping> = {
UV: UVMapping,
Cube: CubeReflectionMapping,
// CubeRefraction: CubeRefractionMapping,
CubeUV: CubeUVReflectionMapping,
Equirectangular: EquirectangularReflectionMapping,
// EquirectangularRefraction: EquirectangularRefractionMapping,
}
const colorSpace: Record<string, ColorSpace> = {
None: '',
SRGB: SRGBColorSpace,
LinearSRGB: LinearSRGBColorSpace,
RGBM16: RGBM16ColorSpace,
DisplayP3: DisplayP3ColorSpace,
}
const textureDataType: Record<string, TextureDataType> = {
UnsignedByte: UnsignedByteType,
Byte: ByteType,
Short: ShortType,
UnsignedShort: UnsignedShortType,
Int: IntType,
UnsignedInt: UnsignedIntType,
Float: FloatType,
HalfFloat: HalfFloatType,
UnsignedShort4444: UnsignedShort4444Type,
UnsignedShort5551: UnsignedShort5551Type,
UnsignedInt248: UnsignedInt248Type,
}
const depthPackingStrategies: Record<string, DepthPackingStrategies> = {
Basic: BasicDepthPacking,
RGBADepthPacking: RGBADepthPacking,
}
function makeMapping<T extends string|number|symbol>(a: Record<string, T>) {
return {
map: a,
inv: Object.fromEntries(Object.entries(a).map(([k, v]) => [v, k])) as Record<T, string>,
uiConfig: Object.entries(a).map(([k, v]) => ({label: k, value: v})) as UiObjectConfig[],
} as const
}
export const threeConstMappings = {
Blending: makeMapping(blending),
AnyMapping: makeMapping(mapping),
ColorSpace: makeMapping(colorSpace),
TextureDataType: makeMapping(textureDataType),
DepthPackingStrategies: makeMapping(depthPackingStrategies),
} as const