@sauskylark/potree
Version:
WebGL point cloud viewer
73 lines (52 loc) • 1.78 kB
JavaScript
import * as THREE from "../../libs/three.js/build/three.module.js";
import {Shaders} from "../../build/shaders/shaders.js";
export class NormalizationEDLMaterial extends THREE.RawShaderMaterial{
constructor(parameters = {}){
super();
let uniforms = {
screenWidth: { type: 'f', value: 0 },
screenHeight: { type: 'f', value: 0 },
edlStrength: { type: 'f', value: 1.0 },
radius: { type: 'f', value: 1.0 },
neighbours: { type: '2fv', value: [] },
uEDLMap: { type: 't', value: null },
uDepthMap: { type: 't', value: null },
uWeightMap: { type: 't', value: null },
};
this.setValues({
uniforms: uniforms,
vertexShader: this.getDefines() + Shaders['normalize.vs'],
fragmentShader: this.getDefines() + Shaders['normalize_and_edl.fs'],
});
this.neighbourCount = 8;
}
getDefines() {
let defines = '';
defines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\n';
return defines;
}
updateShaderSource() {
let vs = this.getDefines() + Shaders['normalize.vs'];
let fs = this.getDefines() + Shaders['normalize_and_edl.fs'];
this.setValues({
vertexShader: vs,
fragmentShader: fs
});
this.uniforms.neighbours.value = this.neighbours;
this.needsUpdate = true;
}
get neighbourCount(){
return this._neighbourCount;
}
set neighbourCount(value){
if (this._neighbourCount !== value) {
this._neighbourCount = value;
this.neighbours = new Float32Array(this._neighbourCount * 2);
for (let c = 0; c < this._neighbourCount; c++) {
this.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount);
this.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount);
}
this.updateShaderSource();
}
}
}