OpenGL ES 3 紋理基礎

2021-10-04 18:29:51 字數 3491 閱讀 3514

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 方面的資訊,包括攝像機的...