| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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();
- }
- }
-
- }
|