texture.html 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Babylon.js sample code</title>
  6. <!-- Babylon.js -->
  7. <!-- Babylon.js -->
  8. <script src="./libs/jquery-1.10.2.min.js"></script>
  9. <script src="./libs/dat.gui.min.js"></script>
  10. <script src="./libs/ammo.js"></script>
  11. <script src="./libs/cannon.js"></script>
  12. <script src="./libs/Oimo.js"></script>
  13. <script src="./libs/earcut.min.js"></script>
  14. <script src="./libs/recast.js"></script>
  15. <script src="./libs/babylon.js"></script>
  16. <script src="./libs/babylonjs.materials.min.js"></script>
  17. <script src="./libs/babylonjs.proceduralTextures.min.js"></script>
  18. <script src="./libs/babylonjs.postProcess.min.js"></script>
  19. <script src="./libs/babylonjs.loaders.js"></script>
  20. <script src="./libs/babylonjs.serializers.min.js"></script>
  21. <script src="./libs/babylon.gui.min.js"></script>
  22. <script src="./libs/babylon.inspector.bundle.js"></script>
  23. <script src="https://cdn.socket.io/4.4.1/socket.io.min.js"></script>
  24. <script src="js/video.js"></script>
  25. <style>
  26. html, body {
  27. overflow: hidden;
  28. width: 100%;
  29. height: 100%;
  30. margin: 0;
  31. padding: 0;
  32. }
  33. #renderCanvas {
  34. width: 100%;
  35. height: 100%;
  36. touch-action: none;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <canvas id="renderCanvas"></canvas>
  42. <script>
  43. var canvas = document.getElementById("renderCanvas");
  44. var startRenderLoop = function (engine, canvas) {
  45. engine.runRenderLoop(function () {
  46. if (sceneToRender && sceneToRender.activeCamera) {
  47. sceneToRender.render();
  48. }
  49. });
  50. }
  51. var engine = null;
  52. var scene = null;
  53. var sceneToRender = null;
  54. var createDefaultEngine = function() { return new BABYLON.Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true, disableWebGL2Support: false}); };
  55. var createScene = function () {
  56. // This creates a basic Babylon Scene object (non-mesh)
  57. var scene = new BABYLON.Scene(engine);
  58. scene.debugLayer.show({embedMode: true})
  59. // This creates and positions a free camera (non-mesh)
  60. var camera = new BABYLON.FreeCamera("camera1", new BABYLON.Vector3(0, 5, -10), scene);
  61. // This targets the camera to scene origin
  62. camera.setTarget(BABYLON.Vector3.Zero());
  63. // This attaches the camera to the canvas
  64. camera.attachControl(canvas, true);
  65. // This creates a light, aiming 0,1,0 - to the sky (non-mesh)
  66. var light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene);
  67. // Default intensity is 1. Let's dim the light a small amount
  68. light.intensity = 0.7;
  69. // Our built-in 'ground' shape.
  70. var ground = BABYLON.MeshBuilder.CreateGround("ground", {width: 6, height: 6}, scene);
  71. BABYLON.Effect.ShadersStore['customVertexShader'] = `
  72. precision highp float;
  73. attribute vec2 uv;
  74. attribute vec3 position;
  75. varying vec2 vUV;
  76. uniform mat4 view;
  77. uniform mat4 projection;
  78. uniform mat4 world;
  79. uniform mat4 worldViewProjection;
  80. void main()
  81. {
  82. vUV = uv;
  83. gl_Position = projection * view * world * vec4(position , 1.0);
  84. }
  85. `;
  86. BABYLON.Effect.ShadersStore["customFragmentShader"]=`
  87. precision highp float;
  88. varying vec2 vUV;
  89. uniform sampler2D chrominanceYTexture;
  90. void main()
  91. {
  92. vec2 uv = vUV;
  93. vec3 color = vec3(0,0,0);
  94. color = texture2D(chrominanceYTexture, uv).rgb;
  95. gl_FragColor = vec4( color, 1.0);
  96. }
  97. `;
  98. var width=512;
  99. var height=1024;
  100. window._videoRawYTexture = BABYLON.RawTexture.CreateLuminanceTexture(
  101. null,
  102. width,
  103. height,
  104. scene,
  105. true,
  106. true,
  107. )
  108. /*
  109. var selfShader = new BABYLON.ShaderMaterial(
  110. 'customShader',
  111. scene,
  112. {
  113. vertex: "custom",
  114. fragment: "custom",
  115. },
  116. {
  117. attributes: ['uv', 'position'],
  118. uniforms: ['view', 'projection', 'worldViewProjection', 'world'],
  119. },
  120. )
  121. selfShader.setTexture('chrominanceYTexture', _videoRawYTexture)
  122. */
  123. var selfShader = new BABYLON.StandardMaterial("xsttest",this.scene);
  124. selfShader.diffuseTexture = window._videoRawYTexture
  125. ground.material = selfShader
  126. return scene;
  127. };
  128. window.generateRandomArray = ()=>{
  129. var rnd=[];
  130. for(let i=0;i< 512*1024;i++)
  131. {
  132. rnd[i] = Math.floor(Math.random()*255);
  133. }
  134. return rnd;
  135. }
  136. window.updateTexture = (yuv)=>
  137. {
  138. let Y = yuv.subarray(0, 512*1024);
  139. window._videoRawYTexture.update(Y)
  140. window._videoRawYTexture.updateSamplingMode(BABYLON.Texture.BILINEAR_SAMPLINGMODE)
  141. Y = undefined;
  142. }
  143. window.changeTexture = (data)=>{
  144. for(let i=0;i< 512*1024;i++)
  145. {
  146. data[i] = Math.floor(Math.random()*255);
  147. }
  148. return data;
  149. }
  150. window.data = new Uint8Array(window.generateRandomArray());
  151. // start
  152. // window.setInterval( ()=>{
  153. // data = window.changeTexture(data);
  154. // window.updateTexture( data );
  155. // }, 60);
  156. window.initFunction = async function() {
  157. var asyncEngineCreation = async function() {
  158. try {
  159. return createDefaultEngine();
  160. } catch(e) {
  161. console.log("the available createEngine function failed. Creating the default engine instead");
  162. return createDefaultEngine();
  163. }
  164. }
  165. window.engine = await asyncEngineCreation();
  166. if (!engine) throw 'engine should not be null.';
  167. startRenderLoop(engine, canvas);
  168. window.scene = createScene();};
  169. initFunction().then(() => {sceneToRender = scene
  170. });
  171. // Resize
  172. window.addEventListener("resize", function () {
  173. engine.resize();
  174. });
  175. </script>
  176. </body>
  177. </html>