C.1 GLSL ES 言語リファレンス この付録は WebGL 用のシェーダをプログラムするために使われるGLSL ES 言語のリファレンスである GLSL ESの詳細は GLSL_ES_Specifi

Similar documents
WebGL Safari WebGL Kageyama (Kobe Univ.) Visualization / 55

WebGL Kageyama (Kobe Univ.) Visualization / 39

Microsoft Word - 18環設演付録0508.doc

WebGL X LR301 Kageyama (Kobe Univ.) Visualization / 45

ゲームエンジンの構成要素

数値計算

WebGL Safari WebGL WebGL Safari Kageyama (Kobe Univ.) / 5

Kageyama (Kobe Univ.) / 36

3D CG Kageyama (Kobe Univ.) Visualization / 22

プログラミング実習I

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - enshu4.ppt [äº™æ‘łã…¢ã…¼ã…›]

スライド 1

WebGL References Kageyama (Kobe Univ.) Visualization *4 2 / 54


Microsoft PowerPoint - ruby_instruction.ppt

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft Word - no02.doc

Java講座

謗域・ュ逕ィppt

謗域・ュ逕ィppt

関数の構造

講習No.12

sinfI2005_VBA.doc

Microsoft Word - no11.docx

数値計算

PowerPoint プレゼンテーション

Microsoft PowerPoint - CproNt02.ppt [互換モード]

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

#include<math.h> 数学関係の関数群で sin() cos() tan() などの三角関数や累乗の pow() 平方根を求める sqrt() 対数 log() などがあります #include<string.h> 文字列を扱う関数群 コイツもまた後日に 4. 自作関数 実は 関数は自分

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Oracle データベースと PSQL v11 を比較する 株式会社エージーテック 2014 年 9 月 30 日

Microsoft Word - 92.doc

Microsoft PowerPoint - qcomp.ppt [互換モード]

Javaプログラムの実行手順

Processingをはじめよう

cp-7. 配列

Functional Programming

メソッドのまとめ

Microsoft PowerPoint - prog07.ppt

コンピューターグラフィックスS

重要例題113

Microsoft Word - 補論3.2

Microsoft PowerPoint - prog05.ppt

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

memo

JavaScriptプログラミング入門 2.JavaScriptの概要

メソッドのまとめ

スライド 1

Microsoft Word - no202.docx

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

PowerPoint Presentation

JavaプログラミングⅠ

Microsoft PowerPoint - 3.pptx

演習1

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

スライド 1

相関係数と偏差ベクトル

4. 操作 ORDER 変数メニューの修整 VARS SORT ORDER 変数名をソートして表示 { X } ORDER 変数 X を最初に表示 0 TVARS ORDER 実数の変数を最初に表示 0 TVARS SORT ORDER 実数の変数をソートして最初に表示 5 TVARS ORDER

PowerPoint Presentation

情報システム設計論II ユーザインタフェース(1)

情報処理Ⅰ演習

Prog1_10th

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

プログラミング実習I

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Microsoft PowerPoint - 09.pptx

コンピュータグラフィックス第6回

プログラミング基礎I(再)

Microsoft PowerPoint - 13th.ppt [互換モード]

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

gengo1-10

Microsoft PowerPoint - 講義資料-mlib

プログラミング入門1

kiso2-06.key

memo

プログラミングD - Java

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

プログラミング基礎

07_dist_01.pdf.pdf

Microsoft Word - no12.doc

PowerPoint プレゼンテーション

Microsoft Word - 201hyouka-tangen-1.doc

gengo1-11

memo

コンピュータグラフィックス第8回

課題

Microsoft PowerPoint - 06.pptx

kiso2-09.key

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Microsoft PowerPoint - prog08.ppt

Transcription:

付録 C OpenGL ES Shading Language

C.1 GLSL ES 言語リファレンス この付録は WebGL 用のシェーダをプログラムするために使われるGLSL ES 言語のリファレンスである GLSL ESの詳細は http://www.khronos.org/registry/gles/specs/2.0/ GLSL_ES_Specification_1.0.17.pdfの公式仕様書を参照していただきたい データ型 GLSL ESは JavaScriptとはまったく別のデータ型を揃えている 表 C-1 では それらのデータ型をまとめてある 表 C-1 データ型 名前 説明 void int float bool vec2 vec3 vec4 関数が戻り値を持たないときや 引数リストが空だということを示すときに使われる特別なデータ型 例 : void myfunc(void {... } 符号付き整数値 例 : int myint1 = 14; int myint2 = -7; 単精度浮動小数点数 例 : float myfloat = 3.14159; true falseの論理値 例 : bool mybool = true; それぞれ2 3 4 個の浮動小数点数要素を持つベクトル 例 : vec3 myvec = vec3(1.0, 2.5, 0.25; C-2

( 表 C-1 続き bvec2 bvec3 bvec4 ivec2 ivec3 ivec4 mat2 mat3 mat4 sampler2d samplercube それぞれ2 3 4 個の論理値要素を持つベクトル 例 : bvec3 myboolvec = bvec3(true, false, false; それぞれ2 3 4 個の整数要素を持つベクトル 例 : ivec3 myintvec = ivec3(12, -4, 84; それぞれ2 2 3 3 4 4 の浮動小数点数行列 例 : mat2 mymat = mat2( 1.0, 0.5, 2.7, 1.5 ; texture2d 関数でアクセスできる 2Dテクスチャ 例 : sampler2d utexture; vec4 color = texture2d(utexture, texcoords; texturecube 関数でアクセスできるキューブにマッピングされるテクスチャ 例 : samplercube uskymap; vec4 color = texturecube(uskymap, texcoords; 組み込み関数 以下の表では GLSL ESの組み込み関数を示す 関数は 提供する機能分野に基づいて別々の表に分類されている ジェネリックなgenType 型で宣言された戻り値と引数は float vec2 vec3 vec4 型にすることができる ただし 1 つの関数呼び出しで使われるすべてのgenType 引数は みな同じ型でなければならない 戻り値の型は 引数の型によって決まる 数学関数 表 C-2 では GLSL ES がサポートする基本数学関数をまとめてある C-3

表 C-2 組み込み数学関数 関数 gentype pow(, gentype n gentype exp( gentype n The constant e (2.718... gentype exp2( gentype n gentype log( gentype log2( gentype sqrt( gentype inversesqrt( gentype abs( 戻り値 xのn 乗 例 : vec2 result = pow(vec2(2.0, 3.0, vec2(4.0, 5.0; // result == vec2(16.0, 243.0 定数 e(2.718... のn 乗 例 : vec2 result = exp(vec2(2.0, 3.0; // result == vec2(7.39, 20.09 2のn 乗 例 : vec2 result = exp2(vec2(2.0, 3.0; // result == vec2(4.0, 8.0 xの自然対数 例 : vec2 result = log(vec2(4.0, 8.0; // result == vec2(1.39, 2.08 xの 2を底とする対数 例 : vec2 result = log2(vec2(4.0, 8.0; // result == vec2(2.0, 3.0 xの平方根 例 : vec2 result = sqrt(vec2(9.0, 25.0; // result = vec2(3.0, 5.0 xの平方根の逆数 つまり1 / sqrt(x を計算する 例 : vec2 result = inversesqrt(vec2(9.0, 25.0; // result = vec2(0.33..., 0.04 xの絶対値 例 : vec2 result = abs(vec2(-4.0, 8.0; // result = vec2(4.0, 8.0 C-4

( 表 C-2 続き gentype sign( gentype floor( gentype ceil( gentype fract( gentype mod(, gentype y gentype mod(, float y gentype min(, gentype y gentype min(, float y xの符号 例 : vec2 result = abs(vec2(-4.0, 8.0; // result == vec2(-1.0, 1.0 x 以下の最大の整数 例 : vec2 result = floor(vec2(2.7, 14.0; // result == vec2(2.0, 14.0 x 以上の最小の整数 例 : vec2 result = ceil(vec2(2.7, 14.0; // result == vec2(3.0, 14.0 xの小数部分 例 : vec2 result = fract(vec2(2.7, 14.0; // result == vec2(0.7, 0.0 除算 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 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 C-5

( 表 C-2 続き gentype max(, gentype y gentype max(, 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 三角関数 GLSL ES は 基本的な数学関数のほか 表 C-3 のような三角関数を提供している 表 C-3 組み込み三角関数 関数 gentype radians( gentype degrees gentype degrees( gentype radians gentype sin( gentype angle gentype cos( gentype angle gentype tan ( gentype angle gentype asin( 戻り値ラジアンに変換されたdegrees radians(degrees == degrees * π / 180 度に変換されたradians degrees(radians == radians * 180 / π angle( 単位ラジアン の正弦 angle( 単位ラジアン の余弦 angle( 単位ラジアン の正接 xの逆正弦 [-π/2, π/2] の範囲の値を返す C-6

( 表 C-3 続き gentype acos( gentype atan( gentype r gentype atan( gentype y, x の逆余弦 [0, π] の範囲の値を返す r の逆正接 [-π/2, π/2] の範囲の値を返す y/x の逆正接 [-π, π] の範囲の値を返す ベクトル 行列関数 表 C-4 には ベクトルや行列を操作しやすくする関数をまとめてある 表 C-4 組み込みのベクトル 行列関数 関数 float length( gentype v float distance( gentype p0, gentype p1 float dot( gentype v0, gentype v1 vec3 cross( vec3 v0, vec3 v1 戻り値ベクトルvの長さ length(v == sqrt(v.x*v.x + v.y*v.y +... 点 p0 p1の距離 distance(p0, p1 == length(p1 - p0 ベクトルv0 v1のドット積 dot(v0, v1 == v0.x*v1.x + v0.y+v1.y +... ベクトル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 C-7

( 表 C-4 続き gentype normalize( gentype v gentype faceforward( gentype N, gentype I, gentype Nref gentype reflect( gentype I, gentype N gentype refract( gentype I, gentype N, float eta mat matrixcompmult( mat m0, mat m1 単位長に正規化されたベクトルv normalize(v == v / length(v サーフェス法線 Nrefが生成ベクトルIと反対向きになっているなら ベクトルNを反転する if (dot(nref, I < 0 return N else return -N 生成ベクトルIが法線 Nを持つサーフェスで反射したもの reflect(i, N == I - 2 * dot(n, I * N 生成ベクトル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 行列 m0 m1 の要素ごとの乗算 ここで mat は mat2 mat3 mat4 のいずれかである ベクトルの関係演算 < > ==!= などの標準の関係演算子は すべての要素をまとめて見なければベクトルを比較できない 表 C-5 には ベクトルの要素ごとの比較 評価を行う関数をまとめてある C-8

表 C-5 組み込みのベクトル関係関数 関数 bvec lessthan( vec v0, vec v1 bvec lessthanequal( vec v0, vec v1 bvec greaterthan( vec v0, vec v1 bvec greaterthanequal( vec v0, vec v1 bvec equal( vec v0, vec v1 bvec equal( bvec v0, bvec v1 bvec notequal( vec v0, vec v1 bvec notequal( bvec v0, bvec v1 戻り値 v0 < v1の要素ごとの評価 lessthan(vec2(1.0, 2.0, vec2(4.0, 2.0 == bvec2(true, false v0 <= v1の要素ごとの評価 lessthanequal(vec2(1.0, 2.0, vec2(4.0, 2.0 == bvec2(true, true v0 > v1の要素ごとの評価 greaterthan(vec2(1.0, 2.0, vec2(4.0, 2.0 == bvec2(false, false v0 >= v1の要素ごとの評価 greaterthanequal(vec2(1.0, 2.0, vec2(4.0, 2.0 == bvec2(false, true 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 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 C-9

( 表 C-5 続き bool any( bvec v bool all( bvec v bvec not( bvec v ベクトルvの任意の要素がtrueならtrue any(bvec3(false, false, false == true any(bvec3(false, true, false == true ベクトルvのすべての要素がtrueならtrue all(bvec3(false, true, false == false all(bvec3(true, true, true == true!vの要素ごとの評価 not(bvec2(true, false == bvec2(false, true ヘルパー関数 表 C-6には 範囲制限やブレンディングなどの処理で役に立つさまざまな関数をまとめてある 表 C-6 組み込みヘルパー関数 関数 gentype clamp(, gentype minval, gentype maxval gentype clamp(, 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 C-10

( 表 C-6 続き gentype mix(, gentype y, gentype a gentype mix(, gentype y, float a gentype step( gentype edge, gentype step( float edge, gentype smoothstep( gentype edge0, gentype edge1, gentype smoothstep( float edge0, float edge1, xとyの間の線形補間 mix(x, y, a == x * (1.0 - a + y * a x の要素のうち edge よりも小さいものは 0.0 そうでないものは 1.0 にする 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 C-11

組み込み変数と定数 GLSL ESは 組み込み関数のほか いくつかの定数と変数を公開している 表 C-7には 頂点 フラグメントシェーダから読み出せる定数をまとめてある これらの定数の値は OpenGL ESの実装によって異なる 表 C-7 定数 定数最小値説明 int gl_maxvertexattribs 8 頂点属性の最大個数 int gl_maxvertexuniformvectors 128 Uniform 頂点ベクトルの最大個数 int gl_maxfragmentuniformvectors 16 Uniform フラグメントベクトルの最大個数 int gl_maxvaryingvectors 8 Varying ベクトルの最大個数 int gl_maxvertextextureimageunits 0 int gl_maxcombinedtextureimageunits 8 頂点シェーダ内のテクスチャイメージユニットの最大個数 頂点シェーダとフラグメントシェーダ全体でのテクスチャイメージユニットの最大個数 int gl_maxtextureimageunits 8 テクスチャユニットの最大個数 int gl_maxdrawbuffers 1 フラグメントシェーダ内の gl_frag Data 配列に含まれる出力カラーの最大個数 表 C-8 には 頂点シェーダに固有で そのためフラグメントシェーダでは使えない変数をま とめてある 表 C-8 頂点シェーダ変数 変数 vec4 gl_position float gl_pointsize 説明 頂点シェーダが計算した現在の頂点の変換 射影された位置 gl.points タイプのジオメトリを描画するときに 点スプライトのサイズを指定するために使われる デフォルトの値は 1.0 C-12

表 C-9 には フラグメントシェーダに固有な変数をまとめてある これらの変数は 頂点 シェーダでは使えない 表 C-9 フラグメントシェーダ変数 変数 vec4 gl_fragcolor vec4 gl_fragcoord vec4 gl_fragdata [gl_maxdrawbuffers] vec2 gl_pointcoord bool gl_frontfacing 説明 現在のフラグメントに与えられたカラー値 現在のフラグメントのウィンドウからの相対座標 現在のフラグメントのフラグメントデータの配列 フラグメントシェーダは gl_fragcoord gl_fragdata のどちらにも値を代入してはならない ポイントスプライトを描くときに gl_pointcoord は フラグメントのポイントからの 2 次元相対座標を保持する 座標は 0.0 から 1.0 までである フラグメントが前面に出ているプリミティブの一部かどうかを示す論理値 C-13