opengl
把光照系統分成了三部分:光源,材質和光照環境。(
opengl
沒有考慮光的折射) 1.
控制光源:
第乙個引數表示設定哪乙個光源的屬性,第二個引數表示設定這個光源的哪個屬性,第三個引數則表示把該屬性值設定為多少;
gllightfv(gl_light0, gl_position, sun_light_position);
gl_position
表示光源所處的位置,其值用(
x,y,z,w
)來表示,如果w為
0的話表示光源在無
限遠處,前三個值則表示了它的方向,這種光源叫做方向性光源。 如果
w不為0,則
x/w, y/w, z/w
表示光源的位置;這種光源叫做位置性光源;
gllightfv(gl_light0, gl_ambient, sun_light_ambient);
gl_ambient
表示光源發出的光經過很多次的反射後留在光照環境中的強度;
gllightfv(gl_light0, gl_diffuse, sun_light_diffuse);
gl_diffuse
表示光源發出的光照射到粗糙表面時經過漫反射後得到的光的強度;
gllightfv(gl_light0, gl_specular, sun_light_specular);
gl_specular
表示光源發出的光照射到光滑表面時經過鏡面反射後得到的光的強度;
gl_spot_direction
、gl_spot_exponent
、gl_spot_cutoff
屬性。表示將光源作為聚光燈使用
(這些屬性只對位置性光源有效)。
gl_constant_attenuation
,gl_linear_attenuation
、gl_quadratic_attenuation屬
性。這三個屬性表示了光源所發出的光線的直線傳播特性(這些屬性只對位置性光源有效)。
2.控制材料:
第乙個引數表示指定哪一面的屬性(
front and back
);glmaterialfv(gl_front, gl_ambient, earth_mat_ambient);
glmaterialfv(gl_front, gl_diffuse, earth_mat_diffuse);
glmaterialfv(gl_front, gl_specular, earth_mat_specular);
glmaterialfv(gl_front, gl_emission, earth_mat_emission);
gl_emission
屬性由四個值組成,表示一種顏色。
opengl
認為該材質本身就微微的向外發射光線,
以至於眼睛感覺到它有這樣的顏色,但這光線又比較微弱,以至於不會影響到其它物體的顏色。
glmaterialf (gl_front, gl_shininess, earth_mat_shininess);
gl_shininess
屬性只有乙個字,叫做「鏡面指數」,取值為0到
128;值越小表示材質越粗糙,光線
照在上面能形成較大的亮點。反之類似於鏡面。
3.選擇光照模型:
「光照模型」即相當於「光照環境」;
Opengl光照(茶壺)
include initialize material property,light source,lighting model,and depth buffer.void init void glfloat mat shininess glfloat light position glfloat ...
OpenGL 光照模型
材質有三種,也就是對光有三種反射 材質被分為了三個屬性,也分別用三個引數來刻畫 對於乙個頂點,有四個向量來刻畫其光照 計算的時候也分為鏡面 漫和環境三類,之後再疊加起來即得到光照下的顏色 向量nlvr 求解顏色 鏡面反射 is rs max v r a,0 ls 環境反射 ia ra la於是 i ...
OpenGL光照測試
opengl光照測試 花了大概半個月,研究了opengl的光照。請注意是固定管線渲染的光照,如果使用著色器的高手們請飄過。這個程式是通過光照對模型的照射,來研究opengl光照的性質。以後可以通過這個程式來構建更加複雜的場景。目前框架和各類的引擎層出不窮,讓我都無法選擇哪乙個了,所以我打算再花一段時...