この文章は、日経BP社から出版されている「HTML5ゲーム開発の極意」の付録PDFを元に、参照しやすいようmarkdown形式に書き起こした、個人的メモです。
##目次
名前 | 説明 |
---|---|
void | 関数が戻り値を持たないときや、引数リストが空だということを示すときに使われる特別なデータ型。 例: void myFunc(void) { ... } |
int | 符号付き整数値。 例: int myInt1 = 14; int myInt2 = -7; |
float | 単精度浮動小数点数。 例: float myFloat = 3.14159; |
bool | true、falseの論理値。 例: bool myBool = true; |
vec2、vec3、vec4 | それぞれ2、3、4個の浮動小数点数要素を持つベクトル。 例: vec3 myVec = vec3(1.0, 2.5, 0.25); |
bvec2、bvec3、bvec4 | それぞれ2、3、4個の論理値要素を持つベクトル。 例: bvec3 myBoolVec = bvec3(true, false, false); |
ivec2、ivec3、ivec4 | それぞれ2、3、4個の整数要素を持つベクトル。 例: ivec3 myIntVec = ivec3(12, -4, 84); |
mat2、mat3、mat4 | それぞれ2×2、3×3、4×4の浮動小数点数行列。 例: mat2 myMat = mat2( 1.0, 0.5, 2.7, 1.5 ); |
sampler2D | texture2D関数でアクセスできる2DテクスチャのID。 例: sampler2D uTexture; vec4 color = texture2D(uTexture, texCoords); |
samplerCube | textureCube関数でアクセスできるキューブにマッピングされるテクスチャのID。 例: samplerCube uSkyMap; vec4 color = textureCube(uSkyMap, texCoords); |
vec系の変数に対して、便利にアクセスできる記法。{x,y,z,w}の他、{r,g,b,a}、{s,t,p,q}という書き方も可能。
vec4 one = vec4(0.0, 1.0, 2.0, 3.0);
vec2 two = one.xy; // vec2(0.0, 1.0)
vec3 three = one.yzw; // vec3(1.0, 2.0, 3.0)
vec4 four = one.xyxy; // vec4(0.0, 1.0, 0.0, 1.0)
vec3 five = vec3(four.zz, three.z); // vec3(0.0, 0.0, 3.0)
ジェネリックなgenType型で宣言された戻り値と引数は、float、vec2、vec3、vec4型にすることができる。
ただし、1つの関数呼び出しで使われるすべてのgenType引数は、みな同じ型でなければならない。
戻り値の型は、引数の型によって決まる。
関数 | 説明 |
---|---|
genType pow(genType x ,genType n ) |
xのn乗。 例: vec2 result = pow(vec2(2.0, 3.0), vec2(4.0, 5.0)); // result == vec2(16.0, 243.0) |
genType exp(genType n ) The constant e(2.718...) |
定数e(2.718...)のn乗。 例: vec2 result = exp(vec2(2.0, 3.0)); // result == vec2(7.39, 20.09) |
genType exp2(genType n ) |
2のn乗。 例: vec2 result = exp2(vec2(2.0, 3.0)); // result == vec2(4.0, 8.0) |
genType log(genType x ) |
xの自然対数。 例: vec2 result = log(vec2(4.0, 8.0)); // result == vec2(1.39, 2.08) |
genType log2(genType x ) |
xの2を底とする対数。 例: vec2 result = log2(vec2(4.0, 8.0)); // result == vec2(2.0, 3.0) |
genType sqrt(genType x ) |
xの平方根。 例: vec2 result = sqrt(vec2(9.0, 25.0)); // result = vec2(3.0, 5.0) |
genType inversesqrt(genType x ) |
xの平方根の逆数、つまり1 / sqrt(x)を計算する。 例: vec2 result = inversesqrt(vec2(9.0, 25.0)); // result = vec2(0.33..., 0.04) |
genType abs(genType x ) |
xの絶対値。 例: vec2 result = abs(vec2(-4.0, 8.0)); // result = vec2(4.0, 8.0) |
genType sign(genType x ) |
xの符号。 例: vec2 result = abs(vec2(-4.0, 8.0)); // result == vec2(-1.0, 1.0) |
genType floor(genType x ) |
x以下の最大の整数。 例: vec2 result = floor(vec2(2.7, 14.0)); // result == vec2(2.0, 14.0) |
genType ceil(genType x ) |
x以上の最小の整数。 例: vec2 result = ceil(vec2(2.7, 14.0)); // result == vec2(3.0, 14.0) |
genType fract(genType x ) |
xの小数部分。 例: vec2 result = fract(vec2(2.7, 14.0)); // result == vec2(0.7, 0.0) |
genType mod(genType x ,genType y ) genType mod( genType x ,float y ) |
除算 x / y の剰余。 例: vec2 result = mod(vec2(5.0, 19.5), vec2(2.0, 5.0)); // result == vec2(1.0, 4.5) vec2 result = mod(vec2(5.0, 19.5), 2.0); // result == vec2(1.0, 1.5) |
genType min(genType x ,genType y ) genType min( genType x ,float y ) |
x、yの最小値。 例: vec2 result = min(vec2(4.0, 15.5), vec2(2.5, 20.0)); // result == vec2(2.5, 15.0) vec2 result = min(vec2(4.0, 15.5), 10.7); // result == vec2(4.0, 10.7) |
genType max(genType x ,genType y ) genType max( genType x ,float y ) |
x、yの最大値。 例: vec2 result = max(vec2(4.0, 15.5), vec2(2.5, 20.0)); // result == vec2(4.0, 20.0) vec2 result = max(vec2(4.0, 15.5), 10.7); // result == vec2(10.7, 15.5) |
関数 | 説明 |
---|---|
genType radians(genType degrees ) |
ラジアンに変換されたdegrees。 radians(degrees) == degrees * π / 180 |
genType degrees(genType radians ) |
度に変換されたradians。 degrees(radians) == radians * 180 / π |
genType sin(genType angle ) |
angle(単位ラジアン)の正弦。 |
genType cos(genType angle ) |
angle(単位ラジアン)の余弦。 |
genType tan (genType angle ) |
angle(単位ラジアン)の正接。 |
genType asin(genType x ) |
xの逆正弦。[-π/2, π/2]の範囲の値を返す。 |
genType acos(genType x ) |
xの逆余弦。[0, π]の範囲の値を返す。 |
genType atan(genType r ) |
rの逆正接。[-π/2, π/2]の範囲の値を返す。 |
genType atan(genType y ,genType x ) |
y/xの逆正接。[-π, π]の範囲の値を返す。 |
関数 | 説明 |
---|---|
float length(genType v ) |
ベクトルvの長さ。 length(v) == sqrt(v.xv.x + v.yv.y + ...) |
float distance(genType p0 ,genType p1 ) |
点p0、p1の距離。 distance(p0, p1) == length(p1 - p0) |
float dot(genType v0 ,genType v1 ) |
ベクトルv0、v1のドット積。 dot(v0, v1) == v0.x*v1.x + v0.y+v1.y + ... |
vec3 cross(vec3 v0 ,vec3 v1 ) |
ベクトルv0、v1のクロス積。 cross(v0, v1) == vec3( v0.y * v1.z - v1.y * v0.z, v0.z * v1.x - v1.z * v0.x, v0.x * v1.y - v1.x * v0.y ) |
genType normalize(genType v ) |
単位長に正規化されたベクトルv。 normalize(v) == v / length(v) |
genType faceforward(genType N ,genType I ,genType Nref ) |
サーフェス法線Nrefが生成ベクトルIと反対向きになっているなら、ベクトルNを反転する。 if (dot(Nref, I) < 0) return N else return -N |
genType reflect(genType I ,genType N ) |
生成ベクトルIが法線Nを持つサーフェスで反射したもの。 reflect(I, N) == I - 2 * dot(N, I) * N |
genType refract(genType I ,genType N ,float eta ) |
生成ベクトルIが屈折率etaで法線Nを持つサーフェスに対して起こす屈折のベクトル。 屈折ベクトルは次のようにして計算する。 k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I)) if (k < 0.0) return genType(0.0) else return eta * I - (eta * dot(N, I) + sqrt(k)) * N |
mat matrixCompMult(mat m0 ,mat m1 ) |
行列m0、m1の要素ごとの乗算。ここで、matはmat2、mat3、mat4のいずれかである。 |
関数 | 説明 |
---|---|
bvec lessThan(vec v0 ,vec v1 ) |
v0 < v1の要素ごとの評価。 lessThan(vec2(1.0, 2.0), vec2(4.0, 2.0)) == bvec2(true, false) |
bvec lessThanEqual(vec v0 ,vec v1 ) |
v0 <= v1の要素ごとの評価。 lessThanEqual(vec2(1.0, 2.0), vec2(4.0, 2.0)) == bvec2(true, true) |
bvec greaterThan(vec v0 ,vec v1 ) |
v0 > v1の要素ごとの評価。 greaterThan(vec2(1.0, 2.0), vec2(4.0, 2.0)) == bvec2(false, false) |
bvec greaterThanEqual(vec v0 ,vec v1 ) |
v0 >= v1の要素ごとの評価。 greaterThanEqual(vec2(1.0, 2.0), vec2(4.0, 2.0)) == bvec2(false, true) |
bvec equal(vec v0 ,vec v1 ) bvec equal( bvec v0 ,bvec v1 ) |
v0 == v1の要素ごとの評価。 equal(vec2(1.0, 2.0), vec2(4.0, 2.0)) == bvec2(false, true) equal(bvec2(true, false), bvec2(false, false)) == bvec2(false, true) |
bvec notEqual(vec v0 ,vec v1 ) bvec notEqual( bvec v0 ,bvec v1 ) |
v0 != v1の要素ごとの評価。 notEqual(vec2(1.0, 2.0), vec2(4.0, 2.0)) == bvec2(true, false) notEqual(bvec2(true, false), bvec2(false, false)) == bvec2(true, false) |
bool any(bvec v ) |
ベクトルvの任意の要素がtrueならtrue。 any(bvec3(false, false, false)) == true any(bvec3(false, true, false)) == true |
bool all(bvec v ) |
ベクトルvのすべての要素がtrueならtrue。 all(bvec3(false, true, false)) == false all(bvec3(true, true, true)) == true |
bvec not(bvec v ) |
!vの要素ごとの評価。 not(bvec2(true, false)) == bvec2(false, true) |
関数 | 説明 |
---|---|
genType clamp(genType x ,genType minVal ,genType maxVal ) genType clamp( genType x ,float minVal ,float maxVal ) |
xの値を[minVal,maxVal]の範囲、つまりmax(minVal,min(maxVal, x))に制限する。 clamp( vec2(0.5, 1.7), vec2(1.0, 1.2), vec2(1.3, 1.5) ) == vec2(1.0, 1.5) clamp(vec2(0.5, 1.7), 0.7, 1.3) == vec2(0.7, 1.3) |
genType mix(genType x ,genType y ,genType a ) genType mix( genType x ,genType y ,float a ) |
xとyの間の線形補間。 mix(x, y, a) == x * (1.0 - a) + y * a |
genType step(genType edge ,genType x ) genType step( float edge ,genType x ) |
xの要素のうち、edgeよりも小さいものは0.0、そうでないものは1.0にする。 |
genType smoothstep(genType edge0 ,genType edge1 ,genType x ) genType smoothstep( float edge0 ,float edge1 ,genType x ) |
xの要素のうち、edge0以下のものは0.0、edge1以上のものは1.0にする。 xがedge0とedge1の間にあるときには、3次エルミート補間を返す。 t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0) return t * t * (3 - 2 * t) |
定数 | データ型 | 最小値 | 説明 |
---|---|---|---|
gl_MaxVertexAttribs | int | 8 | 頂点属性の最大個数。 |
gl_MaxVertexUniformVectors | int | 128 | Uniform頂点ベクトルの最大個数。 |
gl_MaxFragmentUniformVectors | int | 16 | Uniformフラグメントベクトルの最大個数。 |
gl_MaxVaryingVectors | int | 8 | Varyingベクトルの最大個数。 |
gl_MaxVertexTextureImageUnits | int | 0 | 頂点シェーダ内のテクスチャイメージユニットの最大個数。 |
gl_MaxCombinedTextureImageUnits | int | 8 | 頂点シェーダとフラグメントシェーダ全体でのテクスチャイメージユニットの最大個数。 |
gl_MaxTextureImageUnits | int | 8 | テクスチャユニットの最大個数。 |
gl_MaxDrawBuffers | int | 1 | フラグメントシェーダ内のgl_FragData配列に含まれる出力カラーの最大個数。 |
変数 | データ型 | 入出力(R/W) | 説明 |
---|---|---|---|
gl_Position | vec4 | 出力(※必須) | 頂点シェーダが計算した現在の頂点の変換、射影された位置。 |
gl_PointSize | float | 出力 | gl.POINTSタイプのジオメトリを描画する際、点のサイズを指定するために使われる。デフォルトの値は1.0。 |
変数 | データ型 | 入出力(R/W) | 説明 |
---|---|---|---|
gl_FragColor | vec4 | 出力 | 現在のフラグメントに与えられたカラー値。基本的に、こちらに値を指定しないと描画がされない。 |
gl_FragCoord | vec4 | 入力 | 現在のフラグメントのウィンドウからの相対座標。 |
gl_FragData [gl_MaxDrawBuffers] |
vec4 | 出力 | 現在のフラグメントのフラグメントデータの配列。gl_FragColorと同じ機能を持ち、原則としてgl_FragColorを使用する。 |
gl_PointCoord | vec2 | 入力 | ポイントスプライトの場合のみ使用可。ポイントスプライトを描くときに、gl_PointCoordは、フラグメントのポイントからの2次元相対座標を保持する。座標は、0.0から1.0までである。 |
gl_FrontFacing | bool | 入力 | フラグメントがポリゴンの表裏どちらに属するかを示す論理値。 |