threepipe
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

GenericBlendTexturePass.ts 1.4KB

3 лет назад
3 лет назад
3 лет назад
3 лет назад
3 лет назад
12345678910111213141516171819202122232425262728293031323334353637
  1. import {IUniform} from 'three/src/renderers/shaders/UniformsLib'
  2. import {Texture} from 'three'
  3. import {CopyShader} from 'three/examples/jsm/shaders/CopyShader.js'
  4. import {ExtendedShaderPass} from './ExtendedShaderPass'
  5. import {IPass} from './Pass'
  6. export class GenericBlendTexturePass extends ExtendedShaderPass implements IPass {
  7. constructor(uniforms: {[uniform: string]: IUniform}, blendFunc = 'c = a + b;', extraFrag = '', texture?: Texture, maxIntensity = 120) {
  8. super({
  9. vertexShader: CopyShader.vertexShader,
  10. fragmentShader: `
  11. varying vec2 vUv;
  12. ${extraFrag}
  13. void main() {
  14. vec4 a = tDiffuseTexelToLinear ( texture2D( tDiffuse, vUv ) );
  15. vec4 b = tDiffuse2TexelToLinear ( texture2D( tDiffuse2, vUv ) );
  16. vec4 c = vec4(0);
  17. ${blendFunc}
  18. c = clamp(c, vec4(0), vec4(MAX_INTENSITY));
  19. gl_FragColor = c;
  20. #include <encodings_fragment>
  21. }
  22. `,
  23. uniforms: {
  24. 'tDiffuse': {value: null},
  25. 'tDiffuse2': {value: texture},
  26. ...uniforms,
  27. },
  28. defines: {
  29. ['MAX_INTENSITY']: maxIntensity,
  30. },
  31. }, 'tDiffuse', 'tDiffuse2')
  32. this.clear = false
  33. this.needsSwap = true
  34. }
  35. }