最終更新: mikk_ni3_92 2009年03月27日(金) 10:46:18履歴
現在地 >> メニュー >> サンプルコード::Cg >> Cg::基本編07
INDEX:Cg::基本編06 << Cg::基本編07 >> Cg::基本編08?
OpenGLでは、光のあたった物体の色決定に
つまり、
【例】Mark Kilgardの色サンプル、金色の場合
このような値が与えられた場合、
例えば、
この計算は頂点シェーダで記述する場合、フラグメントシェーダで記述する場合の2種類ある。
頂点シェーダの場合は、間の色は線形補間される。
フラグメントシェーダの場合、計算で法線データ、オブジェクト座標値をフラグメントシェーダ内で使うので、
それらを、テクスチャ座標としてわたす必要がある。
INDEX:Cg::基本編06 << Cg::基本編07 >> Cg::基本編08?
OpenGLでは、光のあたった物体の色決定に
- 放射輝度(emissive)
- 環境光(ambient)
- 拡散光(diffuse)
- 鏡面光(specular)
つまり、
[物体表面の色]=(放射輝度) + (環境光) + (拡散光) + (鏡面光)という式になっている。
【例】Mark Kilgardの色サンプル、金色の場合
属性 | RED | GREEN | BLUE | ALPHA | その他 |
環境光(ambient) | 0.24725 | 0.1995 | 0.0745 | 1.0 | |
拡散光(diffuse) | 0.75164 | 0.60648 | 0.22648 | 1.0 | |
鏡面光(specular) | 0.628281 | 0.555802 | 0.366065 | 1.0 | |
shininess | 51.2 |
このような値が与えられた場合、
例えば、
const float Emissive[3] = {0.0, 0.0, 0.0};//係数(自分で設定) const float Ambient[3] = {0.24725, 0.1995, 0.0745};//サンプルデータより const float Diffuse[3] = {0.75164, 0.60648 , 0.22648;,//サンプルデータより const float Specular[3] = {0.628281, 0.555802,0.366065};//サンプルデータより const float Shininess = 51.2;//サンプルデータよりと用意する。
この計算は頂点シェーダで記述する場合、フラグメントシェーダで記述する場合の2種類ある。
頂点シェーダの場合は、間の色は線形補間される。
- Cg::基本編07まとめ1(頂点シェーダでの記述)
フラグメントシェーダの場合、計算で法線データ、オブジェクト座標値をフラグメントシェーダ内で使うので、
それらを、テクスチャ座標としてわたす必要がある。
- Cg::基本編07まとめ2(フラグメントシェーダでの記述)