texture.html 6.0 KB

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