@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
124 lines (114 loc) • 4.55 kB
text/typescript
import {Color} from 'three';
import {Vector3} from 'three';
import {DefaultOperationParams} from '../../../core/operations/_Base';
interface OceanPlaneSopParams extends DefaultOperationParams {
direction: Vector3;
sunDirection: Vector3;
sunColor: Color;
wavesHeight: number;
waterColor: Color;
reflectionColor: Color;
reflectionFresnel: number;
size: number;
distortionScale: number;
timeScale: number;
renderReflection: boolean;
normalBias: number;
multisamples: number;
useFog: boolean;
}
export const DEFAULT_OCEAN_PARAMS = {
pixelRatio: 1,
clipBias: 0, // if clipBias is 0.03 like in BaseReflector, the bottom of the reflection appears cut out
active: true,
tblur: false,
blur: 0,
verticalBlurMult: 0,
tblur2: false,
blur2: 0,
verticalBlur2Mult: 0,
};
export const DEFAULT_PARAMS: OceanPlaneSopParams = {
direction: new Vector3(0, 1, 0),
sunDirection: new Vector3(1, 1, 1),
sunColor: new Color(1, 1, 1),
wavesHeight: 1,
waterColor: new Color(0x001e0f),
reflectionColor: new Color(0xffffff),
reflectionFresnel: 1,
distortionScale: 1,
timeScale: 1,
size: 10,
renderReflection: true,
normalBias: 0.001,
multisamples: 1,
useFog: false,
};
// const DEFAULT_UP = new Vector3(0, 0, 1);
// export class OceanPlaneSopOperation extends BaseSopOperation {
// static override readonly DEFAULT_PARAMS=DEFAULT_PARAMS
// static override type(): Readonly<'oceanPlane'> {
// return 'oceanPlane';
// }
// private _transformResetOptions: TransformResetSopOperation | undefined;
// protected _coreTransform = new CoreTransform();
// override cook(inputCoreGroups: CoreGroup[], params: OceanPlaneSopParams) {
// this._transformResetOptions = this._transformResetOptions || new TransformResetSopOperation(this._scene);
// const transformResetMode = TRANSFORM_RESET_MODES.indexOf(TransformResetMode.CENTER_GEO_RESET_OBJECT);
// const inputCoreGroup = this._transformResetOptions.cook(inputCoreGroups, {mode: transformResetMode});
// const renderer = this._node?.scene().renderersRegister.lastRegisteredRenderer();
// const objects = inputCoreGroup.threejsObjectsWithGeo();
// const waterObjects: ObjectContent<CoreObjectType>[] = [];
// const scene = this.scene().threejsScene();
// for (let object of objects) {
// Water.rotateGeometry(object.geometry, params.direction);
// const waterOptions: WaterOptions = {
// polyScene: this.scene(),
// scene,
// renderer,
// ...DEFAULT_PARAMS,
// direction: params.direction,
// sunDirection: params.sunDirection,
// sunColor: params.sunColor,
// wavesHeight: params.wavesHeight,
// waterColor: params.waterColor,
// reflectionColor: params.reflectionColor,
// reflectionFresnel: params.reflectionFresnel,
// distortionScale: params.distortionScale,
// timeScale: params.timeScale,
// size: params.size,
// // renderReflection: params.renderReflection,
// normalBias: params.normalBias,
// multisamples: params.multisamples,
// useFog: params.useFog,
// };
// const water = new Water(object.geometry, waterOptions);
// waterObjects.push(water as any as ObjectContent<CoreObjectType>);
// water.matrixAutoUpdate = false;
// // make sure object attributes are up to date
// object.matrix.decompose(object.position, object.quaternion, object.scale);
// water.position.copy(object.position);
// water.rotation.copy(object.rotation);
// water.scale.copy(object.scale);
// water.updateMatrix();
// Water.compensateGeometryRotation(water, params.direction);
// //
// // water.updateMatrix();
// // water.matrixAutoUpdate = false;
// const material = water.material;
// material.uniforms.direction.value.copy(params.direction);
// material.uniforms.sunDirection.value.copy(params.sunDirection);
// material.uniforms.sunColor.value.copy(params.sunColor);
// material.uniforms.wavesHeight.value = params.wavesHeight;
// material.uniforms.waterColor.value.copy(params.waterColor);
// material.uniforms.reflectionColor.value.copy(params.reflectionColor);
// material.uniforms.reflectionFresnel.value = params.reflectionFresnel;
// material.uniforms.distortionScale.value = params.distortionScale;
// material.uniforms.timeScale.value = params.timeScale;
// material.uniforms.size.value = params.size;
// material.uniforms.normalBias.value = params.normalBias;
// water.setReflectionActive(isBooleanTrue(params.renderReflection));
// }
// return this.createCoreGroupFromObjects(waterObjects);
// }
// }