紋理對映前,首先自定義讀取點陣圖的函式,其返回型別為aux_rgbimagerec(該結構體定義在glaux.h中)
aux_rgbimagerec* loadbmp(char* filename)
file = fopen(filename, "r");
if (file)
return null;//載入失敗,返回null
}
之後定義乙個loadgltextures()函式用於載入點陣圖並轉換成紋理
建立紋理使用glgentextures()函式
glbindtexture()將紋理名字繫結到紋理目標上
glteximage2d()建立二維紋理,其9個引數含義分別為:1、告訴opengl紋理型別(gl_texture_2d為2d紋理);2、代表影象詳細程度,一般為0;3、資料成分,數字3表示像由rgb三種組分組成;4、紋理寬度;5、紋理高度;6、邊框值,一般為0;7、gl_rgb表示影象由rgb三色資料組成;8、影象資料型別;9、資料**
之後指明濾波方式(影象放大縮小對應紋理的處理)
注意點:要注意釋放存放位圖資料的記憶體,防止記憶體洩露。
int loadgltextures()//載入點陣圖並轉換成紋理
if (textureimage[0])//紋理還存在
free(textureimage[0]);
} return status;
}
然後要在opengl初始化函式中啟用紋理對映(glenable())
int initgl(glvoid)
glenable(gl_texture_2d);//啟用紋理對映
glshademodel(gl_smooth); //設定深度快取
glclearcolor(0.0f, 0.0f, 0.0f, 0.0f);
glcleardepth(1.0f);
glenable(gl_depth_test); //啟用深度測試
gldepthfunc(gl_lequal); //所作深度測試的型別
glhint(gl_perspective_correction_hint, gl_nicest);
return true;
}
最後在drawglscene()中繪製
注意點:
glbindtexture()繫結紋理必須在glbegin()之前或者glend()之後。
gltexcoord2f 的第乙個引數是x座標。 0.0f 是紋理的左側。 0.5f 是紋理的中點, 1.0f 是紋理的右側。
gltexcoord2f 的第二個引數是y座標。 0.0f 是紋理的底部。 0.5f 是紋理的中點, 1.0f 是紋理的頂部。
int drawglscene(glvoid)
OpenGL 紋理對映Mipmap
mipmap是乙個功能強大的紋理技術,它可以提高渲染的效能以及提公升場景的視覺質量,它可以用來解決一般紋理貼圖出現的兩個常見問題 閃爍,當螢幕上被渲染物體的表面與它所應用的紋理影象相比顯得非常小時,就會出現閃爍,尤其當相機和物體在移動的時候,這種負面效果更容易出現。效能問題,載入了大量紋理資料之後,...
複習 OpenGL 紋理對映 總結
今天系統的複習了一下opengl紋理對映 主要參考資料是這兩個 opengl 教程 總體來看,第二個教程更詳盡一些,比第乙個教程多介紹了一下 如何把 texture2d 物件,傳到 fragment shader 的 sampler2d 的 uniform 變數中。很久以前,自己總結過opengl ...
OpenGL總結7 顏色與紋理共存
在使用opengl進行紋理貼圖後,我需要在上面畫一些線作為輔助,但是當我進行畫線的時候發現glcolor中的顏色會覆蓋到紋理上,導致紋理的顏色很奇怪,經過查詢資料和嘗試發現了問題所在。首先,紋理在不使用的時候一定要進行關閉,因為如果不將紋理進行關閉,後面在繪圖的時候會影響到紋理。其次,要對顏色進行儲...