1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <style> body{ margin: 0; padding: 0; } canvas{ width:100%; height:100%; } </style> <body> <canvas id="canvas"></canvas>
<script> var canvas = document.getElementById('canvas'); canvas.width = window.innerWidth; canvas.height = window.innerHeight; var gl = canvas.getContext('webgl'); gl.viewport(0, 0, canvas.width, canvas.height);
var vertexShader=gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertexShader,` attribute vec4 a_position; uniform mat4 u_Mat; varying vec4 v_Color; void main(){ gl_Position=u_Mat*a_position; v_Color=gl_position; } ` ); gl.compileShader(vertexShader);
var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShader,` precision mediump float; varying vec4 v_Color; void main(){ gl_FragColor=v_Color; } ` ); gl.compileShader(fragmentShader);
var program=gl.createProgram(); gl.attachShader(program,vertexShader); gl.attachShader(program,fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
var vertexBuffer=gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer); var vertices=new Float32Array([ 0.0,0.5, -0.5,-0.5, 0.5,-0.5 ]); gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW); var a_position=gl.getAttribLocation(program,'a_position'); gl.vertexAttribPointer(a_position,2,gl.FLOAT,false,0,0); gl.enableVertexAttribArray(a_position); gl.clearColor(0.0,0.0,0.0,0.0); gl.clear(gl.COLOR_BUFFER_BIT); const scale={ x:1.5, y:1.5, z:1.5 } function animate(){ scale.x-=0.01; const mat=new Float32Array([ scale.x,0.0,0.0,0.0, 0.0,scale.x,0.0,0.0, 0.0,0.0,scale.x,0.0, 0.0,0.0,0.0,1.0 ]); const u_Mat=gl.getUniformLocation(program,'u_Mat'); gl.uniformMatrix4fv(u_Mat,false,mat); gl.drawArrays(gl.TRIANGLES,0,3); requestAnimationFrame(animate); } animate(); </script> </body> </html>
|