Guest User

Untitled

a guest
Apr 22nd, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. <script id="vs_src" type="x-shader/x-vertex">
  2. #version 300 es
  3.  
  4. #define POSITION_LOCATION 0
  5. precision highp float;
  6.  
  7. layout(location = POSITION_LOCATION) in vec3 position;
  8. uniform mat4 mvpMatrix;
  9.  
  10. void main(void){
  11. gl_Position = mvpMatrix * vec4(position, 1.0);
  12. }
  13. </script>
  14. <script id="fs_src" type="x-shader/x-vertex">
  15. #version 300 es
  16.  
  17. precision highp float;
  18.  
  19. out vec4 color;
  20.  
  21. void main(void){
  22. color = vec4(1.0, 1.0, 1.0, 1.0);
  23. }
  24. </script>
  25. <script type="text/javascript">
  26.  
  27. const POSITION_LOCATION = 0;
  28.  
  29. onload = ()=>{
  30. // WebGLコンテキストの取得
  31. const gl = canvas.getContext('webgl2');
  32.  
  33. // 画面の初期化
  34. gl.clearColor(0.0, 0.0, 0.0, 1.0);
  35. gl.clear(gl.COLOR_BUFFER_BIT);
  36.  
  37. // vertex shaderのコンパイル
  38. const vshader = gl.createShader(gl.VERTEX_SHADER);
  39. gl.shaderSource(vshader, vs_src.innerText.slice(1));
  40. gl.compileShader(vshader);
  41.  
  42. // コンパイルログ
  43. if(!gl.getShaderParameter(vshader, gl.COMPILE_STATUS))
  44. alert(gl.getShaderInfoLog(vshader));
  45.  
  46. // fragment shaderのコンパイル
  47. const fshader = gl.createShader(gl.FRAGMENT_SHADER);
  48. gl.shaderSource(fshader, fs_src.innerText.slice(1));
  49. gl.compileShader(fshader);
  50.  
  51. // コンパイルログ
  52. if(!gl.getShaderParameter(fshader, gl.COMPILE_STATUS))
  53. alert(gl.getShaderInfoLog(fshader));
  54.  
  55. // プログラムオブジェクトの生成とシェーダの割り当て,リンク
  56. const program = gl.createProgram();
  57. gl.attachShader(program, vshader);
  58. gl.attachShader(program, fshader);
  59. gl.linkProgram(program);
  60.  
  61. // シェーダのリンクが失敗ならエラー出力
  62. if(!gl.getProgramParameter(program, gl.LINK_STATUS))
  63. alert(gl.getProgramInfoLog(program));
  64.  
  65. // プログラムの有効化
  66. gl.useProgram(program);
  67.  
  68. // 頂点座標の決定
  69. const vertex_position = new Float32Array([ 0.0, 1.0, 0.0,
  70. 1.0, 0.0, 0.0,
  71. -1.0, 0.0, 0.0 ]);
  72.  
  73. // バッファオブジェクトの生成,バインド,データの挿入
  74. const vbo = gl.createBuffer();
  75. gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
  76. gl.bufferData(gl.ARRAY_BUFFER, vertex_position, gl.STATIC_DRAW);
  77.  
  78. // inの有効化,登録
  79. gl.enableVertexAttribArray(POSITION_LOCATION);
  80. gl.vertexAttribPointer(POSITION_LOCATION, 3, gl.FLOAT, false, 0, 0);
  81.  
  82. // 回転行列の作成
  83. const matrix = new Float32Array([ 0.60, 0.00, 0.00, 0.00,
  84. 0.00, 0.95, -0.32, -0.32,
  85. 0.00, -0.32, -0.95, -0.95,
  86. 0.00, 0.00, 2.97, 3.16 ]);
  87.  
  88. // uniformLocationの取得,登録
  89. const uniLocation = gl.getUniformLocation(program, 'mvpMatrix');
  90. gl.uniformMatrix4fv(uniLocation, false, matrix);
  91.  
  92. // モデルの描画,画面の更新
  93. gl.drawArrays(gl.TRIANGLES, 0, 3);
  94. gl.flush();
  95. };
  96.  
  97. </script>
  98. <body style="margin:0;height:100%;">
  99. <canvas id="canvas" width=640 height=480 style="width:100%;height:100%;">
Add Comment
Please, Sign In to add comment