最終更新: mikk_ni3_92 2010年02月23日(火) 16:55:15履歴
現在地:メニュー >> GLSL >> GLSL編06
INDEX:GLSL編05 << GLSL編06 >> GLSL編07
フラグメントシェーダでは、texture2D関数を使って
指定のテクスチャユニットに対して、テクセルをサンプリングする。
【例】:glsl.frag
「uniform sampler2D texture0」
という変数があるが、これにはテクスチャユニット番号を設定しておく。
【例】:main.cpp
glEnable関数は不要。
バインドは、テクスチャユニットの切り替えも忘れずに
【例】
INDEX:GLSL編05 << GLSL編06 >> GLSL編07
出力用組み込み変数『gl_TexCoord[]』に指定のテクスチャユニットを代入する。
【例】:glsl.vert
【例】:glsl.vert
//頂点シェーダ void main(void) { //投影変換 (モデルビュー * プロジェクション) * 頂点座標 gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; //0番目のテクスチャユニットの座標をそのまま与える gl_TexCoord[0] = gl_MultiTexCoord0; }
フラグメントシェーダでは、texture2D関数を使って
指定のテクスチャユニットに対して、テクセルをサンプリングする。
【例】:glsl.frag
uniform sampler2D texture0;//テクスチャユニット0 //フラグメント void main(void) { //指定のテクスチャユニット、現在バインドされている //テクスチャオブジェクトからサンプリングする gl_FragColor = texture2D(texture0,gl_TexCoord[0].st); }▲ここで、
「uniform sampler2D texture0」
という変数があるが、これにはテクスチャユニット番号を設定しておく。
【例】:main.cpp
… … glUseProgram(programId); … … //変数名texture0には「0」が入っている glUniform1i(glGetUniformLocation(programId, "texture0"), 0);//テクスチャユニット0とする
glEnable関数は不要。
バインドは、テクスチャユニットの切り替えも忘れずに
【例】
… … glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, TexId); glutSolidTeapot(1); glBindTexture(GL_TEXTURE_2D, 0); … …