最終更新:
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); … …

