現在地 >> メニュー >> サンプルコード::Cg >> Cg::基本編06
INDEX:Cg::基本編05 << Cg::基本編06 >> Cg::基本編07

テクスチャ


Cgを使ってテクスチャをマッピングするには、以下の手順をとる

【CPU側】
  1. 画像を読み込んでテクスチャを作成
  2. テクスチャとCgとの関連付け
  3. 有効化

【Cg側】
  1. 頂点シェーダ → テクスチャ座標を送る
  2. フラグメントシェーダ → 対応するテクスチャ座標から、テクセルの色を取得する

テクスチャとCgとの関連付け


CPU側で作成したテクスチャはGPU側で対応をつける必要がある。
対応付けるものは、
  • 読み込んだテクスチャとの対応付け
  • Cg内での名前

である。

【例】
glGenTextures(1, &texture[0]);

... ...

CGparameter CgFragmentParam_decal; //Cgフラグメント関係パラメータ
... ...
//フラグメント用パラメータの関連付け
CgFragmentParam_decal = cgGetNamedParameter(CgFragmentProgram, "decal");//名前
cgGLSetTextureParameter(CgFragmentParam_decal, texture[0]); //テクスチャとの関連付け
例の通り、関連付けは「フラグメントシェーダ」の部分で行う。

有効化


有効化には、「cgGLEnableTextureParameter()関数」でパラメータを有効化すればよい。

【例】
CGparameter CgFragmentParam_decal; //Cgフラグメント関係パラメータ
... ...
//フラグメント用パラメータの関連付け
CgFragmentParam_decal = cgGetNamedParameter(CgFragmentProgram, "decal");//名前
cgGLSetTextureParameter(CgFragmentParam_decal, texture[0]); //テクスチャとの関連付け
... ...

cgGLEnableTextureParameter(CgFragmentParam_decal); //有効化
Draw(); //描画
cgGLDisableTextureParameter(CgFragmentParam_decal); //無効化

頂点シェーダでの記述


頂点シェーダでは、「glTexCoord2f()」などで「テクスチャ座標」が入ってくるが、
これは、何もせずにフラグメントシェーダへ渡す。

【例】
//出力用データ構造
struct VERTEX_DATA
{
	float4 position : POSITION;
	float2 texCoord : TEXCOORD0;
};


//----- 頂点シェーダメイン関数 ----//
VERTEX_DATA Cg_Main(in float4 position : POSITION, //透視投影のため、4次元(x,y,z,w)での入力
					in float2 texCoord : TEXCOORD0,
					uniform float4x4 modelViewMatrix)
{
	VERTEX_DATA OUT;

	OUT.position = mul(modelViewMatrix, position); //透視投影
	OUT.texCoord = texCoord;				//テクスチャ座標はそのままわたす

	return OUT;
}

フラグメントシェーダでの記述


フラグメントシェーダでは、「tex2D()関数」を使って、テクセルの色を取得する。




【例】
//データ構造
struct COLOR_OUTPUT {
	float4 color : COLOR;
};


//--------- フラグメントメイン関数 -----------//
COLOR_OUTPUT Cg_Fragment_Main(in float2 texCoord : TEXCOORD0, 
								uniform sampler2D decal : TEX0)
{
	COLOR_OUTPUT OUT;
	
	OUT.color = tex2D(decal,texCoord); //テクスチャから色を取得
	
	return OUT;
}

サンプルコード


目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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