texture3d-from-2d-linear.glsl.ts 1.0 KB

12345678910111213141516171819202122232425
  1. /**
  2. * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. * @author Michael Krone <michael.krone@uni-tuebingen.de>
  6. */
  7. export default `
  8. vec4 texture3dFrom2dLinear(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
  9. float zSlice0 = floor(pos.z * gridDim.z);
  10. float column0 = intMod(zSlice0 * gridDim.x, texDim.x) / gridDim.x;
  11. float row0 = floor(intDiv(zSlice0 * gridDim.x, texDim.x));
  12. vec2 coord0 = (vec2(column0 * gridDim.x, row0 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
  13. vec4 color0 = texture2D(tex, coord0);
  14. float zSlice1 = zSlice0 + 1.0;
  15. float column1 = intMod(zSlice1 * gridDim.x, texDim.x) / gridDim.x;
  16. float row1 = floor(intDiv(zSlice1 * gridDim.x, texDim.x));
  17. vec2 coord1 = (vec2(column1 * gridDim.x, row1 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
  18. vec4 color1 = texture2D(tex, coord1);
  19. float delta0 = abs((pos.z * gridDim.z) - zSlice0);
  20. return mix(color0, color1, delta0);
  21. }
  22. `