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


光源と反射


OpenGLでは、光のあたった物体の色決定に
  • 放射輝度(emissive)
  • 環境光(ambient)
  • 拡散光(diffuse)
  • 鏡面光(specular)
の4つを計算している。

つまり、
[物体表面の色]=(放射輝度) + (環境光) + (拡散光) + (鏡面光)
という式になっている。


【例】Mark Kilgardの色サンプル、金色の場合
属性REDGREENBLUEALPHAその他
環境光(ambient)0.247250.19950.07451.0
拡散光(diffuse)0.751640.606480.226481.0
鏡面光(specular)0.6282810.5558020.3660651.0
shininess51.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種類ある。
頂点シェーダの場合は、間の色は線形補間される。


フラグメントシェーダの場合、計算で法線データ、オブジェクト座標値をフラグメントシェーダ内で使うので、
それらを、テクスチャ座標としてわたす必要がある。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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