最終更新: mikk_ni3_92 2009年02月09日(月) 16:08:59履歴
現在地 >> メニュー >> サンプルコード::Cg >> Cg::基本編06
INDEX:Cg::基本編05 << Cg::基本編06 >> Cg::基本編07
Cgを使ってテクスチャをマッピングするには、以下の手順をとる
【CPU側】
【Cg側】
CPU側で作成したテクスチャはGPU側で対応をつける必要がある。
対応付けるものは、
である。
【例】
有効化には、「cgGLEnableTextureParameter()関数」でパラメータを有効化すればよい。
【例】
頂点シェーダでは、「glTexCoord2f()」などで「テクスチャ座標」が入ってくるが、
これは、何もせずにフラグメントシェーダへ渡す。
【例】
フラグメントシェーダでは、「tex2D()関数」を使って、テクセルの色を取得する。
【例】
INDEX:Cg::基本編05 << Cg::基本編06 >> Cg::基本編07
Cgを使ってテクスチャをマッピングするには、以下の手順をとる
【CPU側】
- 画像を読み込んでテクスチャを作成
- テクスチャとCgとの関連付け
- 有効化
【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; }
- Cg::基本編06まとめ1
- Cg::基本編06まとめ2(アニメーション1)
- Cg::基本編06まとめ3(アニメーション2)