I am Charmie

メモとログ

03_uniform_parameter_program

今回は,uniform parameterとやらの話.
C2E1v_greenは,バーテックスのカラーとして,常に緑色を返していた.異なる色を変えさせたい時にどうすれば良いかと言うと,パラメータとしてカラーを与えてあげればOK.
今回のバーテックスシェーダ(C3E1v_anyColor)は,GLから受け取ったカラーの値を返す処理となっている.
C3E1v_Output C3E1v_anycolor(float2 position : POSITION,
uniform float3 constantColor)
{
C3E1v_Output OUT;

OUT.position = float4(position,0,1);
OUT.color = constantColor; // some RGB color

return OUT;
}
入力に,ユニフォーム変数constantColorという引数が追加されていて,この値を出力のカラーとして返している.

GL側からの変数の渡し方は,以下のようになる.
cgSetParameter3fv(myCgVertexParam_constantColor, green);
GL側でのdraw関数は以下のようになっている.
const float green[3] = { 0.2, 0.8, 0.3 };

cgSetParameter3fv(myCgVertexParam_constantColor, green);
drawStar(-0.1, 0, 5, 0.5, 0.2);
drawStar(-0.84, 0.1, 5, 0.3, 0.12);
drawStar( 0.92, -0.5, 5, 0.25, 0.11);

cgSetParameter3f(myCgVertexParam_constantColor,
0.7, 0.1, 0.1); / Red /
drawStar( 0.3, 0.97, 5, 0.3, 0.1);
drawStar( 0.94, 0.3, 5, 0.5, 0.2);
drawStar(-0.97, -0.8, 5, 0.6, 0.2);
まず最初に,星を3個描く.この時バーテックスシェーダに対して,ユニフォーム変数として緑色(0.2,0.8,0.3)を指定している.
次に,星をもう3個描く.こちらでは,バーテックスシェーダに対して,ユニフォーム変数として赤色(0.7,0.1,0.1)を指定している.
実際にプログラムを実行すると,緑色をした星が3個,赤い星が3個表示される.