1.紋理
紋理對映就是將一張點陣圖貼在3d模型上,讓模型更有真實感。比如一顆人頭,眼睛鼻子嘴巴頭髮都由三角形構成,會給系統帶來很大的開銷。如果用紋理來做,可以由乙個球和人臉的紋理組成,真實感也很強。。(只是個例子,真這麼做會很恐怖。。。)
opengl把紋理座標規範化到0與1之間,就是說如果一張正方形的紋理,從左下角開始逆時針方向四個頂點的座標分別是(0, 0), (1, 0), (1, 1), (0, 1)
紋理對映時根據模型每個頂點的紋理座標進行繪製。
當模型的大小和紋理大小不一致時,opengl會根據設定處理紋理,進行放大或縮小。這個叫紋理過濾器(fileter)
opengl可以設定3種紋理過濾器。
1.最近點取樣,速度最快,效果最低。
直接對紋理進行放大縮小。舉個例子,有兩個頂點,座標是(1, 0)和(3, 0),對應的紋理座標分別是(0, 0), (0.7, 0)(假設這個紋理中乙個畫素的直徑是0.1)。當判斷 (2, 0) 的顏色時,根據線性差值,紋理座標應該是(0.35, 0),可是這個畫素是不存在的,根據就近原則,選擇了(0.4, 0) 這個畫素的顏色值。
opengl中的設定如下(nehe lesson 7 的**)
view plainglbindtexture(gl_texture_2d, texture[0]);
gltexparameteri(gl_texture_2d,gl_texture_mag_filter,gl_nearest); // ( new )
gltexparameteri(gl_texture_2d,gl_texture_min_filter,gl_nearest); // ( new )
glteximage2d(gl_texture_2d, 0, 3, textureimage[0]->sizex, textureimage[0]->sizey, 0, gl_rgb, gl_unsigned_byte, textureimage[0]->data);
2.線性紋理過濾,速度較最近點取樣要低,但是效果好
還是舉上面的例子,判斷(2, 0) 顏色的時候,取(0.3, 0) 和 (0.4, 0) 的顏色值進行插值,得到(2, 0)的顏色
opengl中的設定
view plain
glbindtexture(gl_texture_2d, texture[1]);
gltexparameteri(gl_texture_2d,gl_texture_mag_filter,gl_linear);
gltexparameteri(gl_texture_2d,gl_texture_min_filter,gl_linear);
glteximage2d(gl_texture_2d, 0, 3, textureimage[0]->sizex, textureimage[0]->sizey, 0, gl_rgb, gl_unsigned_byte, textureimage[0]->data);
3.多級漸進紋理(mipmap),速度較快,效果好。opengl自動建立幾個不同大小的高質量紋理,根據模型的大小選擇丟失顏色資訊最少的那張紋理。
opengl中的設定
view plain
glbindtexture(gl_texture_2d, texture[2]);
gltexparameteri(gl_texture_2d,gl_texture_mag_filter,gl_linear);
gltexparameteri(gl_texture_2d,gl_texture_min_filter,gl_linear_mipmap_nearest); // ( new )
nehe 7讀取點陣圖的函式已經不能用了,因為缺少 glaux 庫。所以修改了下,用windows api讀位圖
view plain
bool
loadtexture(
lptstr
szfilename, gluint &texid)
// creates texture from a bitmap file
2.材質和光照
物體表面的顏色是由物體的反射光來決定的。如果乙個物體呈紅色,說明他表面的材質把藍光和綠光都吸收,而把紅光反射(前提是入射光同時含有這3中顏色)。
材質屬性有3種,環境光反射(ambient),漫反射(diffuse),鏡面反射(specular)
opengl中光源也有3種屬性,環境光,漫反射,鏡面反射。
材質決定了反射光的強度,比如乙個材質的環境光反射屬性為(r, g, b)(0.1, 0.1, 0.9),說明這個材質把大部分紅光和綠光都吸收了,而藍光則大部分反射。
又假設環境光為(r, g, b)(0.5, 0.5, 0.5),反射的光強就是各顏色分量相乘(0.25, 0.25, 0.49),物體表面就顯示為藍色。(注意這只是環境光的計算模型,漫反射和鏡面反射模型並不是簡單的對顏色分量相乘,還與光源角度有關。紋理顏色與反射的光強也會疊加)
OpenGL 光照和材質
opengl 光照和材質 前言 很難受呀,一天又過去了,沒有達到預期的進度,等下寫完這篇部落格,抓緊研究滑鼠實現軌跡球!長路漫漫啊 注 此篇文章建立在mfc環境搭建完成後 1.渲染處理 在opengl中,可以定義頂點的顏色,但如何定義線段的顏色,如何定義平面的顏色,這就需要opengl通過各個頂點的...
OpenGL光源 材質和光照模型
好久沒寫部落格了,從現在開始,養成乙個好的習慣,不斷的進行總結。以前都是直接用,效果好就行,不管是具體怎麼設定的。現在突然想想什麼都學不到,於是就自己動手除錯了一番,做了一下總結 opengl在處理光照的過程中主要包含三項內容,光源 材質和光照模型。也就是我們在光照設定的 中常看到的gllightf...
學習OpenGL(五)顏色 光照與材質
學習opengl 五 顏色 光照與材質 kezunhai gmail.com 顏色 光照和材質是opengl的重要內容,其中glcolor函式設定當前的顏色,該函式之後繪製的所有頂點 圖形 都使用該顏色。對於乙個點,其顏色就是設定的顏色,而對於一條直線而言,如果兩個頂點的顏色不同,那麼兩點之間線的顏...