houseShader.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. export default {
  2. attributes: ['uv', 'position'],
  3. uniforms: ['view', 'projection', 'worldViewProjection', 'world',
  4. 'isYUV', 'focal_width_height', 'texture_video'],
  5. defines: ["#define SHADOWFULLFLOAT", "#define NUM_BONE_INFLUENCERS 0", "#define NUM_MORPH_INFLUENCERS 0"],
  6. samplers: ['shadowSampler', 'texture_video'],
  7. vertex: `
  8. precision highp float;
  9. varying vec3 ModelPos;
  10. attribute vec2 uv;
  11. attribute vec3 position;
  12. uniform mat4 view;
  13. uniform mat4 projection;
  14. uniform mat4 world;
  15. uniform mat4 worldViewProjection;
  16. void main()
  17. {
  18. #include<instancesVertex>
  19. ModelPos = vec3( view * finalWorld * vec4(position , 1.0));
  20. gl_Position = projection * view * finalWorld * vec4(position , 1.0);
  21. }
  22. `,
  23. fragment: `
  24. precision highp float;
  25. varying vec3 ModelPos;
  26. uniform float isYUV; // false: 0, true: 1.0
  27. uniform sampler2D texture_video;
  28. uniform vec3 focal_width_height;
  29. vec2 SampleTex(vec3 pt3d)
  30. {
  31. return focal_width_height.x / focal_width_height.yz * pt3d.xy / pt3d.z + 0.5;
  32. }
  33. void main()
  34. {
  35. vec3 color = vec3(0,0,0);
  36. float shadow = 1.0;
  37. vec2 uv = SampleTex( normalize(ModelPos) );
  38. if( isYUV < 0.5 )
  39. {
  40. color = texture2D(texture_video, uv).rgb;
  41. }else{
  42. const mat4 YUV2RGB = mat4
  43. (
  44. 1.1643828125, 0, 1.59602734375, -.87078515625,
  45. 1.1643828125, -.39176171875, -.81296875, .52959375,
  46. 1.1643828125, 2.017234375, 0, -1.081390625,
  47. 0, 0, 0, 1
  48. );
  49. vec4 result = vec4(
  50. texture2D( texture_video, vec2( uv.x, uv.y * 0.666666 + 0.333333 ) ).x,
  51. texture2D( texture_video, vec2( uv.x * 0.5, uv.y * 0.333333 ) ).x,
  52. texture2D( texture_video, vec2( 0.5 + uv.x * 0.5, uv.y * 0.333333 ) ).x,
  53. 1
  54. ) * YUV2RGB;
  55. color = clamp(result.rgb, 0.0, 1.0);
  56. }
  57. if( uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0 )
  58. {
  59. color = vec3(0,0,0);
  60. }
  61. gl_FragColor = vec4(shadow * color * 1.0, 1.0);
  62. }
  63. `
  64. }