采用了最簡單的局部光照模型,用opengl的光照方程:I = Ia * Ka + Id * Kd * (L dot N) + Is * Ks * pow((R dot V),n)
I,L為光照強度和材質參數,L,N,R,V分別是光線反方向,法線,視線反方向,反射光線方向,n為鏡面反射因子,這條公式只考慮了環境光(ambient),鏡面光(specularity),散射光(diffuse)的影響,實際上還有發射光(emission),不過對于局部光照模型來說,這種發射光沒多大意義,稍微修正了下散射光部分,把光線和法線的點積值映射到了(0.0f,1.0f)范圍,讓背光部分不至于一團黑,公式變為:
I = Ia * Ka + Id * Kd * (L dot N + 1.0) * 0.5 + Is * Ks * pow((R dot V),n)
點光源效果:

另外把紋理和zbuffer也加上了,紋理采用的是仿射紋理映射,修正紋理映射涉及到浮點的精度問題,在z距離變化比較大的時候紋理跳躍比較嚴重,暫時還沒想到一個合適的解決辦法,紋理尋址方式固定范圍,不做越界尋址處理,支持雙線性紋理過濾,目前紋理圖片格式完成了BMP圖片的載入
關閉深度測試 開啟深度測試

posted on 2009-09-06 00:23
清風 閱讀(2313)
評論(2) 編輯 收藏 引用 所屬分類:
圖形