WebGLについて書いてみる
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>WebGL デモ</title>
<script src="webgl-demo.js" type="module"></script>
</head>
<body>
<canvas id="glcanvas" width="640" height="480"></canvas>
</body>
</html>
main();
//
// ここから開始
//
function main() {
const canvas = document.querySelector("#glcanvas");
// GL コンテキストを初期化
const gl = canvas.getContext("webgl");
// WebGL が使用可能で動作している場合にのみ続行
if (gl === null) {
alert(
"WebGL を初期化できません。ブラウザーまたはマシンが対応していない可能性があります。",
);
return;
}
// クリアカラーを黒に設定し、完全に不透明する
gl.clearColor(0.0, 0.0, 0.0, 1.0);
// 指定されたクリアカラーでカラーバッファーをクリアする
gl.clear(gl.COLOR_BUFFER_BIT);
}
viewportについて
ビューポートとはウィンドウの中で表示を行うエリアのこと canvasに(1000,700)の幅で設定しても、
// (x0,y0,x1,y1)
/*
viewportを設定することでcanvas上のどこに描画するかを設定できる
canvas-----------------------(1000,700)|
| |
|-------------(width,height)| |
| | |
| | |
| | |
(0,0)-----------------------|----------|
*/
gl.viewport(0,0,width/2,height/2)
lookAt関数を使う
lookAt は WebGL でカメラの向きを設定する関数です。 eye はカメラの位置、 at はカメラが向く点、 up は上方向のベクトルを表します。 lookAt 関数はカメラの変換行列を設定するために使用されます
var camera = mat4.create();//カメラのビュー行列
var eye = vec3.fromValues(0.0, 0.0, 5.0);//カメラ位置
var at = vec3.fromValues(0.0, 0.0, 0.0);//カメラの向き
var up = vec3.fromValues(0.0, 1.0, 0.0);//上方向のベクトル
mat4.lookAt(camera, eye, at, up);
視野を設定する
var camera = mat4.create();//カメラのビュー行列
var fieldOfView = 45 * Math.PI / 180; // 視野角
var aspect = gl.canvas.clientWidth / gl.canvas.clientHeight;//アスペクト比
var zNear = 0.1;//近くのクリップ面
var zFar = 100.0;//遠くのクリップ面
mat4.perspective(camera, fieldOfView, aspect, zNear, zFar);