updated on 2011/01/31 15:46:08
変数と変数型
変数型 | 説明 |
float, int, bool | スカラーのデータ型(浮動小数点値、整数値、ブール値) |
float, vec2, vec3, vec4 | 浮動小数点のベクトル型(1~4成分) |
int, ivec2, ivec3, ivec4 | 整数のベクトル型(1~4成分) |
bool, bvec2, bvec3, bvec4 | ブールベクトル型(1~4成分) |
mat2, mat3, mat4 | 浮動小数点の行列(2x2~4x4) |
sampler2D, samplerCube | テクスチャのデータ型(二次元方、 キューブ型) |
変数コンストラクタ
float f = 1.0;
bool b = true;
int i = 0;
f = float(b); // boolをfloatに変換
f = float(i); // intをfloatに変換
b = bool(i); // floatをboolに変換
vec4 v4 = vec4(1.0); // v4 = {1.0, 1.0, 1.0, 1.0};
vec3 v3 = vec3(1.0, 0.0, 0.5); // v3 = {1.0, 0.0, 0.5};
vec3 tmp = vec3(v3); // tmp = v3;
vec2 v2 = vec2(v3); // v2 = {v2.x, v2.y};
v4 = vec4(v2, tmp, 0.0); // v4 = {v2.x, v2.y, tmp.x, 0.0};
mat3 m3 = mat3(1.0, 0.0, 0.0, // 最初の列
0.0, 1.0, 0.0, // 2番目の列
0.0, 0.0, 1.0); // 3番目の列
ベクトルと行列の成分
ベクトル成分の入れ替えサンプル
vec3 v3 = vec3(0.0, 1.0, 2.0);
vec3 tmp;
tmp = v3.xyz; // tmp = {0.0, 1.0, 2.0};
tmp = v3.xxx; // tmp = {0.0, 0.0, 0.0};
tmp = v3.zyx; // tmp = {2.0, 1.0, 0.0};
行列アクセスのサンプル
mat4 m4 = mat4(1.0); // 対角要素を1.0(単位行列)に初期化
vec4 col0 = m4[0]; // 行列からベクトルを取得
float m1_1 = m4[1][1]; // 行列の1行1列の要素を取得
float m2_2 = m4[2][2]; // 行列の2行2列の要素を取得
定数
const宣言のサンプル
const float zero = 0.0;
const float pi = 3.14159;
const vec4 red = vec4(1.0, 0.0, 0.0, 1.0);
const mat4 identity = mat4(1.0);
構造体
ユーザー型coordStruct、変数名coordVarの構造体宣言のサンプル
struct coordStruct
{
vec4 color;
float start;
float end;
}coordVar;
coordVar = coordStruct(vec4(0.0, 1.0, 0.0, 0.0), // color
0.5, // start
2.0); // end
配列
float fArray[4];
vec4 vArray[2];
演算子
スカラー、ベクトル、行列演算の例
float f;
vec4 v4;
mat4 m4;
v4 = v4 * f; // v4の各成分にスカラーfを乗算
v4 = v4 * v4; // v4の各成分を一緒に乗算
v4 = m4 * v4; // m4 * v4 の行列とベクトルを乗算
m4 = m4 * m4; // m4 * m4 の行列と行列を乗算
利用可能な演算子の一覧
演算子の種類 | 説明 |
* | 乗算 |
/ | 除算 |
+ | 加算 |
- | 減算 |
++ | インクリメント(前置、後置) |
-- | デクリメント(前置、後置) |
= | 代入 |
+=, -=, *=, /= | 算術代入 |
==, !=, <, >, <=, >= | 比較演算子 |
&& | 理論積 |
^^ | 排他的理論和 |
|| | 包括的理論和 |
関数
GLSL記述言語の修飾子
修飾子 | 説明 |
in | パラメーターが値で渡され、関数で変更されない事を示す(デフォルト値) |
inout | 変数が参照で関数に渡され、その値が変更される場合は、関数終了後に行われる事を示す |
out | 変数の値は関数に渡されず、関数から戻るときに変更される事を示す |
パラメーター修飾子の例
vec4 func(inout float floatValue, // inoutパラメータ
out vec4 vectorValue, // outパラメータ
mat4 matrixValiue); // inパラメータ(デフォルト値)
vec4 func(vec3 aNormal, vec3 light, vec4 baseColor) // 拡散光の計算式
{
return baseColor * dot(normal, light);
}
組み込み関数
float nDotL = dot(normal, light);
float rDotL = dot(viewDir, (2.0*normal) * nDotL - light);
float specular = specularColor * pow(rDotV, speclarPower);
Angle & Trigonometry Functions [8.1]
Component-wise operation. Parameters specified as angle are
assumed to be in units of radians. T is float, vec2, vec3, vec4
Component-wise operation. Parameters specified as angle are
assumed to be in units of radians. T is float, vec2, vec3, vec4
T radians(T degrees) | degrees to radians |
T degrees(T radians) | radians to degrees |
T sin(T angle) | sine |
T cos(T angle) | cosine |
T tan(T angle) | tangent |
T asin(T x) | arc sine |
T acos(T x) | arc cosine |
T atan(T y, T x) | arc tangent |
T atan(T y_over_x) | arc tangent |
T sinh(T x) | hyperbolic sine |
T cosh(T x) | hyperbolic cosine |
T tanh(T x) | hyperbolic tangent |
T asinh(T x) | hyperbolic sine |
T acosh(T x) | hyperbolic cosine |
T atanh(T x) | hyperbolic tangen |
Qualifier変数タイプ
uniform | ・アプリケーションからシェーダーに引き渡す変数 ・読み込み専用 ・名前空間が頂点シェーダとフラグメントシェーダの両方にまたがる。 ・ビルトインのuniform変数は、sampler2D, samplerCubeなど。 |
attribute | ・頂点属性から読み込んだ値が設定される変数 ・シェーダー内では読み込み専用の定数として扱われる ・gl_Vertex(位置)、gl_Normal(法線)、テクスチャ座標、色などのデータを格納 ・描画される頂点ごとに指定されるデータ ・ユーザ独自の頂点ごとに変化するデータを用意し、シェーダに渡すことが可能 ・バーテックスシェーダでのみ利用可能 |
varying | ・バーテックスシェーダからフラグメントシェーダに引き渡す変数 ・varyingと定義された変数の値は、フラグメントシェーダーの同名の変数に自動的に設定される ・varying変数の定義はバーテックスシェーダとフラグメントシェーダの両方で行う |