WebGLを学ぶためのサンプルプログラムを教えてください。
WebGLを学ぶためのサンプルプログラムを教えてください。
ここでは、WebGLを学ぶためのサンプルプログラムの一例を紹介します。以下のプログラムは、WebGLを使用して正方形を描画するものです。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>WebGL Sample Program</title> <style> canvas { border: 1px solid black; } </style> </head> <body> <canvas id="myCanvas"></canvas> <script> // WebGLコンテキストの取得 var canvas = document.getElementById('myCanvas'); var gl = canvas.getContext('webgl'); // 頂点データの定義 var vertices = [ -0.5, 0.5, 0.0, -0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.5, 0.5, 0.0 ]; // 頂点インデックスの定義 var indices = [ 0, 1, 2, 0, 2, 3 ]; // 頂点シェーダーのコード var vsSource = ` attribute vec3 aVertexPosition; void main() { gl_Position = vec4(aVertexPosition, 1.0); } `; // フラグメントシェーダーのコード var fsSource = ` void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); } `; // 頂点バッファオブジェクトの生成とデータの設定 var vertexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW); // 頂点インデックスバッファオブジェクトの生成とデータの設定 var indexBuffer = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW); // 頂点シェーダーの生成 var vs = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vs, vsSource); gl.compileShader(vs); // フラグメントシェーダーの生成 var fs = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fs, fsSource); gl.compileShader(fs); // プログラムオブジェクトの生成とリンク var program = gl.createProgram(); gl.attachShader(program, vs); gl.attachShader(program, fs); gl.linkProgram(program); gl.useProgram(program); // 頂点座標属性の設定 var vertexPositionAttribute = gl.getAttribLocation(program, 'aVertexPosition'); gl.enableVertexAttribArray(vertexPositionAttribute); gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer); gl.vertexAttribPointer(vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0); // 描画 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer); gl.drawElements(gl.TRIANGLES, indices.length, gl.UNSIGNED_SHORT, 0); </script> </body> </html>
このプログラムでは、canvas要素を使用してWebGLコンテキストを取得し、頂点データと頂点インデックスを定義しています。また、頂点シェーダーとフラグメントシェーダーのコードを文字列として定義し、それらをコンパイルしてプログラムオブジェクトを生成し、描画処理を行っています。 このサンプルプログラムは、正方形を描画するだけではありますが、WebGLの基本的な使い方を学ぶのに役立つものです。また、WebGLでより複雑な描画を行うためには、シェーダーや頂点データ、テクスチャなどの概念を深く理解する必要があります。
本プログラムを実行してみた例。