現在地メニュー >> GLSL >> GLSL編06
INDEX:GLSL編05 << GLSL編06 >> GLSL編07

GLSLのテクスチャマッピング


GLSLでテクスチャマッピングをする場合は、テクスチャユニット単位で考える
(※テクスチャオブジェクト単位ではない)

使い方

頂点シェーダ

出力用組み込み変数『gl_TexCoord[]』に指定のテクスチャユニットを代入する。
【例】: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);
… …

サンプルコード

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます