1、讀取檔案
將儲存的檔案讀取到記憶體(方法很多)。
inputstream is = this.getresources().openrawresource(path);
bitmap bitmaptmp;
try
finally
catch(ioexception e)
}
2、載入紋理
將記憶體影象資料上傳到視訊記憶體。
void glapientry glteximage2d (glenum target,
glint level,
glint internalformat,
glsizei width,
glsizei height,
glint border,
glenum format,
glenum type,
const glvoid *pixels);
target:
紋理維度 gl_texture_1d gl_texture_2d gl_texture_3d。
level:
mip貼圖層次,一般設定為0 。
internalformat:
每個紋理單元中儲存多少顏色成分。
width、height、depth:
載入紋理的寬度、高度、深度。習慣使用2的整數次方去設定這些引數。
border:
允許為紋理貼圖指定乙個邊界寬度。
format:
opengl 畫素格式。
type:
解釋引數pixels指向的資料,告訴opengl 使⽤快取區中的什麼資料型別來儲存顏⾊分量,畫素資料的資料型別。
pixels:
指向圖形資料的指標。
另外,也可以使用glutils的teximage2d方法。
glutils.teximage2d(
gles30.gl_texture_2d, //紋理型別
0, //紋理的層次,0表示基本影象層,可以理解為直接貼圖
bitmaptmp, //紋理影象
0 //紋理邊框尺寸
);bitmaptmp.recycle(); //紋理載入成功後釋放記憶體中的紋理圖
3、設定紋理引數
void gltexparameterf (glenum target, glenum pname, glint param);
void gltexparameteri (glenum target, glenum pname, glint param);
void gltexparameterfv (glenum target, glenum pname, glint param);
void gltexparameteriv (glenum target, glenum pname, glint param);
target
: 紋理維度 gl_texture_1d gl_texture_2d gl_texture_3d。
pname
:指定需要設定哪個紋理引數。
param
:指定特定的紋理引數的值。
gles30.gltexparameterf(gles30.gl_texture_2d, //設定紋理取樣方式
gles30.gl_texture_min_filter,gles30.gl_nearest); //紋理縮小時,臨近取樣
gles30.gltexparameterf(gles30.gl_texture_2d,
gles30.gl_texture_mag_filter,gles30.gl_linear); //紋理放大時,線性取樣
gles30.gltexparameterf(gles30.gl_texture_2d,
gles30.gl_texture_wrap_s,gles30.gl_clamp_to_edge); //s方向環繞方式
gles30.gltexparameterf(gles30.gl_texture_2d,
gles30.gl_texture_wrap_t,gles30.gl_clamp_to_edge); //t方向環繞方式
4、建立紋理物件
void glgentextures (glsizei n, gluint *textures);
指定紋理物件的數量
和指標
(指標指向乙個無符號整型陣列,由紋理物件識別符號填充)。
int textures = new int[1];
gles30.glgentextures(
1, //產生的紋理id的數量
textures, //紋理id的陣列
0 //偏移量
);
5、繫結紋理狀態
void glbindtexture (glenum target, gluint texture);
target:
gl_texture_1d、gl_texture_2d、gl_texture_3d。
texture:
需要繫結的紋理物件。
gles30.glbindtexture(gles30.gl_texture_2d, textureid);//繫結紋理
6、刪除紋理物件
void gldeletetextures (glsizei n, const gluint *textures);
7、乙個小示例
public void inittexture()//textureid
finally
catch(ioexception e)
}//通過輸入流載入***************end********************=
//實際載入紋理進視訊記憶體
glutils.teximage2d(
gles30.gl_texture_2d, //紋理型別
0, //紋理的層次,0表示基本影象層,可以理解為直接貼圖
bitmaptmp, //紋理影象
0 //紋理邊框尺寸
);bitmaptmp.recycle(); //紋理載入成功後釋放記憶體中的紋理圖
}
OpenGL ES 3 紋理環繞
紋理座標的範圍通常是從 0,0 到 1,1 那如果我們把紋理座標設定在範圍之外會發生什麼?無論是 s 軸還是 t 軸的紋理座標都是在 0.0 1.0 的範圍內,這滿足了大多數情況。但在特定的情況下,也可以設定大於 1 的紋理座標。當紋理座標大於 1 以後,設定的?方式就會起作用了。1 重複紋理環繞 ...
OpenGL ES 紋理基礎
位圖 點陣圖是一系列的0和 1,表示開啟或關閉的畫素值 點陣圖中 一塊記憶體中的每個位正好對應於螢幕上的乙個畫素的狀態.它可 以表示掩碼 字型和字元多邊形甚至是兩色的抖 像.畫素圖 與點陣圖相比 畫素圖更有趣 用途更大 畫素圖在記憶體中的布局與點陣圖相似.但是 它的每個畫素可以由超過 1個位的儲存空...
OpenGL ES 3 投影方式 詳述
1 攝像機的設定 從日常生活的經驗中可以很容易地了解到,隨著攝像機位置 姿態的不同,就算是對同一 個場景進行拍攝,得到的畫面也是迥然不同的。因此攝像機的位置 姿態在opengl es 應用程式的開發中就顯得非常重要,首先需要介紹一下攝像機的設定方法。攝像機的設定需要給出 3 方面的資訊,包括攝像機的...