blog

webGLの基本

まず最初に、線形補間は値ではなく補間方法で、この補間の関数は一度に多項式です。 断片的な補間:最も近いデータ値を見つけ、同じ値を割り当てます。 線形補間:2点における既知の関数fの値で他の点の値を近似...

Mar 31, 2020 · 4 min. read
シェア

座標系

線形補間

まず、線形補間は値ではなく、多項式である関数を一度に補間する方法です。

では、補間とはどういう意味でしょうか?

数値解析において補間とは、既知の離散データ点の範囲を通して新しいデータ点を外挿するプロセスまたは方法のことです。科学や工学の問題を解くとき、これらの既知のデータ点は、通常、サンプリングや実験などによって得られ、連続関数や密な離散方程式を通して、関数や方程式から未知のデータを推測することができます。

補間アルゴリズムによって、補間の種類は次のように分類されます:

  • フラグメント補間:最も近いデータ値を見つけ、同じ値を割り当てます。

  • 線形補間:2点における関数fの値を、他の点における既知の値で近似すること。

例えば、2点A、Bから一次方程式 f=ax+bf=ax+bが決まれば、この関数から任意のxに対応する値を求めることができます。

  • その他、多項式補間、ニュートン補間、スプライン補間など。

補間手法によって精度が異なるため、速度、時間、コストなど、さまざまな要素を考慮して補間手法を選択する必要があります。

webGLの補間関数は

  • step(edg,x)

この関数は、x< />の場合、2つの値に基づいてステップ関数を生成します。

  • smoothstep(edg0, edg1, x)

<=edge0则返回0.0;如果x>x =edge1 なら 1.0 を返し、そうでないなら

f=ax+bt=クランプ /,,)t=クランプ /,0,1)

t∗t∗t∗t∗ を返します

基本ステップ

ステップ 1: webGL コンテキストの作成

 var canvas = document.querySelector("#canvas");
	var gl = canvas.getContext("webgl");
	if (!gl) {
		return;
	}

ステップ2:webGLアプリケーションの作成

//2.1頂点シェーダーとスライスシェーダーの2つのシェーダーを作成する。スライスシェーダーも同様である。
	var source = document.getElementById("vertex-2d").text;
 var vertexShader = gl.createShader(gl.VERTEX_SHADER); // シェーダーオブジェクトを作成する
	gl.shaderSource(vertexShader, source); //データソースを提供する
	gl.compileShader(vertexShader); // コンパイルする> シェーダーを生成する
 
//2.2 webGLアプリケーションを作成し、2つのシェーダーをリンクする
 	var program = gl.createProgram();
	gl.attachShader(program, vertexShader);
	gl.attachShader(program, fragmentShader);
	gl.linkProgram(program);

ステップ3:バッファーの作成

 var positions = [
		-0.7, -0.5,
		0.7, -0.5,
		-0.7, 0.5,
		0.7, -0.5,
		-0.7, 0.5,
		0.7, 0.5,
	];
 var positionBuffer = gl.createBuffer();
 gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);

ステップ 4: キャンバスのクリーンアップとバッファからのデータ取得

//4.1 キャンバスをクリーンアップする
 gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);//座標を変換する
	gl.clearColor(0, 0, 0, 0);// キャンバスをクリーンアップする
	gl.clear(gl.COLOR_BUFFER_BIT);
 
//4.2 webGLアプリケーションをアクティブにする
	gl.useProgram(program);//シェーダープログラムを有効にする
	gl.enableVertexAttribArray(positionAttributeLocation);//対応する属性aを有効にする_position
 
//4.3 バッファからカウンタをフェッチする
	gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
	// positionBufferからデータを読み込む方法をプロパティに伝える(ARRAY_BUFFER)
	var size = 2; // 反復実行ごとに2ユニットのデータを抽出する;
	var type = gl.FLOAT; // 各ユニットのデータ型は32ビット浮動小数点型である。
	var normalize = false; // データを正規化する必要はない
	var stride = 0; // 0 = ユニット数を移動する* 単位あたりのメモリ使用量
	// 各反復は、次のデータ開始点までどれだけのメモリを消費するかスポーツを実行する
	var offset = 0; // バッファの先頭から読み込みを開始する
	gl.vertexAttribPointer(
		positionAttributeLocation, size, type, normalize, stride, offset);
	

ステップ5:シーンのレンダリング

 //GLプログラムを実行する
	var primitiveType = gl.TRIANGLES; //要素のタイプは三角形である
	var offset = 0;
	//頂点シェーダーの実行回数は6回で、毎回バッファから2つの値を取得して_position
	var count = 6;
	gl.drawArrays(primitiveType, offset, count);
Read next

Linux コマンドライン-WILLIAM(7)-パッケージ管理

Linuxコミュニティでしばらく時間を過ごすと、どのLinuxディストリビューションがベストかについて多くの意見を目にすることができます。多くの場合、これらの議論は非常に無価値で、デスクトップの背景がかわいいかどうかなど、つまらないことに焦点が当てられています。 ディストリビューションの品質を決める最も重要なことは、パッケージングです。

Mar 31, 2020 · 8 min read