WebGL2 の context をここでは変数名 gl で表記するものとする。
最初の行に改行などを挟まず #version 300 es が必要。
なので、文字列リテラル(バッククォート1つで囲む改行可能文字列)を使う場合は、
最初の行にバックスラッシュを入れるなどの調整があったほうが良い。
#version 300 es は webgl2 において最初の行に必須の宣言。void main() は両方のシェーダーで必須関数。precision mediump float; はフラグメントシェーダーの2行目に必須の宣言。テンプレ
#version 300 es void main(){ }
#version 300 es precision mediump float; void main(){ }
古い書き方をしているサイトのコードなどに騙されないように。
これらは並列実行用。
| 古い | 新しい |
|---|---|
attribute | in |
varying | out |
カメラ行列など、すべての頂点に対して同じ変数を使うとなったら、
uniform vec3 cam;。 attribute とか varying は使わないでいい。
gl_Position 頂点シェーダーで出力しないといけないもの vec4 ?gl_PointSize 頂点サイズが決められる?in 自分でバッファ作って送り込むout フラグメントシェーダにわたるin' 頂点シェーダの out から受け取る?out vec4 色を出力する?dot | 内積 |
min | |
max |
その他 https://qiita.com/edo_m18/items/71f6064f3355be7e4f45
webgl2 context
uniformMatrix3( pointer, transpose, matrix )gl.TRIANGLES は IBO を使って表示する。gl.TRIANGLE_STRIP は (1,2,3), (2,3,4), (3,4,5) … という感じですべての連続する三点を使う三角形を描画する。gl_Position で -1,+1 の範囲にある三角形が見える gl.enable(gl.CULL_FACE) デフォルトでは、この左手系で反時計周りな三角形が描画される。| type | face index | vertex index | ||
|---|---|---|---|---|
| 0,1,2 | F0 | V0 | V1 | V2 |
| 1,0,2 | F1 | V2 | V1 | V3 |
| 0,1,2 | F2 | V2 | V3 | V4 |
| 1,0,2 | F3 | V4 | V3 | V5 |
| 0,1,2 | F4 | V4 | V5 | V6 |
| 1,0,2 | F5 | V6 | V5 | V7 |
| 0,1,2 | F6 | V6 | V7 | V8 |
| 1,0,2 | F7 | V8 | V7 | V9 |
| … | ||||
うまく一回の strip 呼び出しで描画できなさそうなときは半時計回りの三角形を挟んで無かったことにする?