作者VictorTom (鬼翼&娃娃魚)
看板C_and_CPP
標題Re: [問題] OPENGL 光源問題
時間Fri Dec 18 00:40:38 2009
※ 引述《yising770128 (電通人)》之銘言:
: ( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
: ( 未必需要依照此格式,文章條理清楚即可 )
: 遇到的問題: (題意請描述清楚)
: 我使用OPENGL
: 一個畫面有兩個3D正方體的圖形
: 顏色分別為全紅和全綠
: 因為正方體六面的顏色都一樣所以沒什麼立體感
: 我設置了環境光 漫射光 鏡面光
建議使用原文, ambient, diffuse, specular
: 但是兩正方體顏色卻變為單色(依環境光參數改變而變)
: 希望得到的正確結果:
: 希望兩個正方體在加入光源之後
: 看的出立體感
: 但兩個圖形不會只有一個顏色
OpenGL裡的Lighting的效果, 主要需要四個Lighting相關的屬性....
1. Light 本身的 ambient, diffuse, specular
用來代表/模擬真實世界光源對三種特性光提供的能量強度
2. Material 的 ambient, diffuse, specular, 及emission
用來代表被照體(polygon)對於三種特性光能量的反射比例
emission是用來模擬物體本身也會發光時的效果
3. Normal, 代表被照體的polygon的法向量
主要在diffuse與specular的光入射/反射計算中使用
4. Light 照射的方向/所在的位置/光源類型等
其中, 1.與2.都以類似Color的下法傳入RGBA的值來做設定....
3.則是以(X, Y, Z)的向量型式來做設定, 與4.習習相關....
當然還有其他的屬性, 例如光源類型, 光照角度, 衰減率等等等....
這些相關的設定請進一步直接去OpenGL的man網頁查詢....
http://www.opengl.org/sdk/docs/man/
上面的設定裡, Light或Material的ambient, diffuse, specular等漏設或設錯了....
或者是Normal或Light的方向設錯了等, 都會使得Lighting的效果出不來或不明顯....
: 程式跑出來的錯誤結果:
: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
: DEV-C
: 有問題的code: (請善用置底文標色功能)
: 補充說明:
目前的確如原文推文所說, 看起來是Normal沒有設好的關係....
但是也有可能是光源沒有設好, 或者兩個都沒有設好等造成....
請您再檢查看看, 或者拿範例等再研究一下; 不然就貼code吧:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.174.98
→ dp2:唉,我也想學OpenGL,可惜沒時間…… 12/18 00:42
→ VictorTom:如果有目標有壓力, 就會擠壓出時間來學啦XDDD 12/18 00:45
推 carlcarl:想學的東西太多了ˊˋ 12/18 00:49
推 yoco315:推薦這篇文章 12/18 01:00
推 saxontai:看不懂還是要推,V 大也是很佛心的! 12/18 01:11
→ VictorTom:沒有啦, 騙甲騙甲(台)啦....Orz 12/18 01:37
→ VictorTom:原文推文又提了一個可能性, Shade Model沒設成Smooth XD 12/18 01:39
推 Bencrie:根據當助教的經驗 ... 會不會是 ambient設太高 XDD 12/19 17:17