OpenGL的紋理坐標(biāo)與旋轉(zhuǎn)顯示
貼一張我自己用draw.io畫(huà)的圖,順便推薦一下這個(gè)在線畫(huà)圖的網(wǎng)站 :draw.io晓锻。
OpenGL的紋理坐標(biāo)原點(diǎn)是在左下角,ios/Android顯示系統(tǒng)的原點(diǎn)在左上角力穗,跟紋理是上下顛倒的(其實(shí)應(yīng)該說(shuō)是垂直鏡像的)宦芦,所以紅1代表ios圖片原點(diǎn)位置。如圖中的R0
腻扇,沒(méi)有任何旋轉(zhuǎn)時(shí)圖片從左上角紅1開(kāi)始到右下角紅4债热。
此時(shí)手機(jī)采集攝像頭是橫屏狀態(tài)采集而來(lái)的,在iphone上的橫屏是Home鍵在左的狀態(tài)幼苛。
所以opengl的顯示矩陣按紅1開(kāi)始到紅4排列窒篱。
當(dāng)把手機(jī)豎起來(lái)Home鍵朝下時(shí),相當(dāng)于將手機(jī)向右旋轉(zhuǎn)90度舶沿,如圖R90
墙杯。紅1從左上角變成了右上角。
以下是openGL顯示圖片時(shí)的矩陣括荡,代碼中填寫(xiě)坐標(biāo)的從圖中對(duì)應(yīng)的紅色1開(kāi)始順序填寫(xiě)即可:
static const GLfloat rotation0[] = {
0.0f, 1.0f,//bottom left 這個(gè)注釋對(duì)應(yīng)OpenGL紋理左下角原點(diǎn)
1.0f, 1.0f,//bottom right
0.0f, 0.0f,//top left
1.0f, 0.0f,//top right
};
static const GLfloat rotateRight90[] = {
1.0f, 1.0f,
1.0f, 0.0f,
0.0f, 1.0f,
0.0f, 0.0f,
};
static const GLfloat rotateRight180[] = {
1.0f, 0.0f,
0.0f, 0.0f,
1.0f, 1.0f,
0.0f, 1.0f,
};
static const GLfloat rotateRight270[] = {
0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 0.0f,
1.0f, 1.0f,
};
以上是顯示的矩陣高镐,但如果是openGL內(nèi)部處理旋轉(zhuǎn)而不是顯示時(shí),按openGL的原點(diǎn)順序旋轉(zhuǎn)即可畸冲,如:
static const GLfloat rotation0[] = {
0.0f, 0.0f,//bottom left
1.0f, 0.0f,//bottom right
0.0f, 1.0f,//top left
1.0f, 1.0f,//top right
};
static const GLfloat rotateRight90[] = {
1.0f, 0.0f,
1.0f, 1.0f,
0.0f, 0.0f,
0.0f, 1.0f,
};
...
鏡像
對(duì)應(yīng)上圖嫉髓,水平鏡像(即我們平常照鏡子)將圖按垂直中軸線翻轉(zhuǎn)观腊,垂直鏡像(比較少用)將圖按水平中軸線翻轉(zhuǎn)。