OpenGL如何讀取並使用兩張紋理

2021-09-26 15:15:39 字數 2548 閱讀 6800

opengl如何讀取並使用兩張紋理

1、讀取一張紋理

virtual unsigned    loadtexture(const char* filename)

/*** 產生乙個紋理id,可以認為是紋理控制代碼,後面的操作將書用這個紋理id

gl_apicall void gl_apientry glgentextures (glsizei n, gluint* textures)

n:用來生成紋理的數量;textures:儲存紋理索引的第乙個元素指標

*/glgentextures(1, &textureid);

/*** 使用這個紋理id,或者叫繫結(關聯)

將紋理索引繫結到目標紋理

*/glbindtexture(gl_texture_2d, textureid);

/*** 指定紋理的放大,縮小濾波,使用線性方式,即當放大的時候插值方式

*/gltexparameteri(gl_texture_2d, gl_texture_mag_filter, gl_linear);

gltexparameteri(gl_texture_2d, gl_texture_min_filter, gl_linear);

/*** 將的rgb資料上傳給opengl.

*/glteximage2d(

gl_texture_2d, //! 指定是二維

0, //! 指定為第一級別,紋理可以做mipmap,即lod,離近的就採用級別大的,遠則使用較小的紋理

gl_rgba, //! 紋理的使用的儲存格式

width, //! 寬度,老一點的顯示卡,不支援不規則的紋理,即寬度和高度不是2^n。

height, //! 寬度,老一點的顯示卡,不支援不規則的紋理,即寬度和高度不是2^n。

0, //! 是否有邊框

gl_rgba, //! 資料的格式,bmp中,windows,作業系統中儲存的資料是bgr格式

gl_unsigned_byte, //! 資料是8bit資料

pixels

);/**

* 釋放記憶體

*/freeimage_unload(dib);

return textureid;

}

2、使用它

virtual void render()

; //清空緩衝區

glclear(gl_depth_buffer_bit | gl_color_buffer_bit);

//視口,在windows視窗指定的位置和大小上繪製opengl內容

glviewport(0, 0, _width, _height);

//建立乙個投影矩陣

cell::matrix4 screenproj = cell::ortho(0, float(_width), 0, float(_height), -100.0f, 100);

_shader.begin();

;cell::matrix4 matmvp = screenproj;

uvanima +=0.01f;

glactivetexture(gl_texture0);//啟用0號紋理單元

glbindtexture(gl_texture_2d, _textureid);//繫結textureid,到目標紋理,將textureid設定為當前紋理單元的操作紋理

glactivetexture(gl_texture1);//啟用1號紋理單元

glbindtexture(gl_texture_2d, _textureid1);//繫結textureid1,到目標紋理

gluniform1i(_shader._textureid, 0);//傳遞0進去,

//shader的texture2d(_textureid,_outuv);呼叫0號紋理單元的紋理

gluniform1i(_shader._textureid1, 1);

gluniformmatrix4fv(_shader._mvp, 1, false, matmvp.data());

gluniform1f(_shader._uvanima, uvanima);

glvertexattribpointer(_shader._position, 2, gl_float, false, sizeof(vertex), vertex);

glvertexattribpointer(_shader._uv, 2, gl_float, false, sizeof(vertex), &vertex[0].uv);

glvertexattribpointer(_shader._color, 4, gl_unsigned_byte, true, sizeof(vertex), &vertex[0].color);

gldrawarrays(gl_********_strip, 0, 4);

}_shader.end();

}

SQL兩張表如何關聯

比如 我有table1 和 table2 兩張表table1 id name 1 張三 男 2 李四 女 3 王五 男table2 比如 我有table1 和 table2 兩張表 table1 id name 1 張三 男 2 李四 女 3 王五 男 table2 id hobby lid 1 下...

SQLSERVER中如何快速比較兩張表的不一樣

一般來說,如何檢測兩張表的內容是否一致,體現在複製 的時候發布端和訂閱端的兩端的資料上面 我這裡羅列了一些如何從資料庫層面來解決此類問題的方法 第一步當然就是檢查記錄數 是否一致,否則不用想其他方法了 這裡我們用兩張表t1 old,t1 new 來演示方法介紹 方法一 老老實實看表結構和表記錄數,弊...

SQLSERVER中如何快速比較兩張表的不一樣

不知不覺要寫2014年的最後一篇博文了 一般來說,如何檢測兩張表的內容是否一致,體現在複製的時候發布端和訂閱端的兩端的資料上面 我這裡羅列了一些如何從資料庫層面來解決此類問題的方法 第一步當然就是檢查記錄數是否一致,否則不用想其他方法了 這裡我們用兩張表t1 old,t1 new來演示 方法介紹 方...