關(guān)于OpenGL ES繪制圖片的翻轉(zhuǎn)

由于紋理坐標左下為原點坐標, 所有我們繪制的圖片為倒著的, 接下來介紹幾種翻轉(zhuǎn)方式.

1.通過旋轉(zhuǎn)矩陣進行翻轉(zhuǎn).(這種方式是通過改變頂點, 相當于把畫布翻轉(zhuǎn)了)

首先需要在頂點著色器中創(chuàng)建旋轉(zhuǎn)矩陣的管道

attribute vec4 position;
attribute vec2 textCoordinate;
uniform mat4 rotateMatrix;//旋轉(zhuǎn)矩陣

varying lowp vec2 varyTextCoord;

void main()
{
    varyTextCoord = textCoordinate;

    vec4 vPos = position;
    vPos = vPos * rotateMatrix;//每次頂點向量都乘以旋轉(zhuǎn)矩陣得到新的頂點
    
    gl_Position = vPos;
}

接下來創(chuàng)建一個旋轉(zhuǎn)矩陣, 并通過管道傳到頂點著色器.

-(void)rotateTextureImage
{
    //注意搬葬,想要獲取shader里面的變量壕探,這里記得要在glLinkProgram后面,后面,后面!
    //1. rotate等于shaderv.vsh中的uniform屬性忌怎,rotateMatrix
    GLuint rotate = glGetUniformLocation(self.myPrograme, "rotateMatrix");
    
    //2.獲取渲旋轉(zhuǎn)的弧度
    float radians = 180 * 3.14159f / 180.0f;
   
    //3.求得弧度對于的sin\cos值
    float s = sin(radians);
    float c = cos(radians);
    
    //4.因為在3D課程中用的是橫向量炭晒,在OpenGL ES用的是列向量
    /*
     參考Z軸旋轉(zhuǎn)矩陣
     */
    GLfloat zRotation[16] = {
        c,-s,0,0,
        s,c,0,0,
        0,0,1,0,
        0,0,0,1
    };

    //5.設(shè)置旋轉(zhuǎn)矩陣
    /*
     glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
     location : 對于shader 中的ID
     count : 個數(shù)
     transpose : 轉(zhuǎn)置
     value : 指針
     */
    glUniformMatrix4fv(rotate, 1, GL_FALSE, zRotation);
}
2. 在解壓圖片時, 將圖片翻轉(zhuǎn)(頂點不改變), 可以自己想象一下.
CGContextTranslateCTM(spriteContext, 0, rect.size.height);//將圖片向下移動圖片高度的距離
CGContextScaleCTM(spriteContext, 1.0, -1.0);//先圍繞x軸翻轉(zhuǎn)上來, 在圍繞y軸翻轉(zhuǎn)一次(里外翻轉(zhuǎn)).
3. 改變紋理采樣坐標(頂點著色器和片元著色器都可以, 由于頂點著色器執(zhí)行次數(shù)小于片元著色器, 所以修改頂點著色器更好, 但是也不用太過于糾結(jié)).

OpenGL要求y軸0.0坐標是在圖片的底部的伙菜,但是圖片的y軸0.0坐標通常在頂部.
我們可以改變頂點數(shù)據(jù)的紋理坐標衍慎,翻轉(zhuǎn)y值(用1減去y坐標)转唉。
我們可以編輯頂點著色器來自動翻轉(zhuǎn)y坐標,替換TexCoord的值為TexCoord = vec2(texCoord.x, 1.0f - texCoord.y);.

//修改片元著色器
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
void main()
{
    gl_FragColor = texture2D(colorMap, vec2(varyTextCoord.x,1.0-varyTextCoord.y));
}

//修改頂點著色器
attribute vec4 position;
attribute vec2 textCoordinate;
varying lowp vec2 varyTextCoord;

void main()
{
    varyTextCoord = vec2(textCoordinate.x,1.0-textCoordinate.y);
    gl_Position = position;
}

4.直接修改源紋理數(shù)據(jù)
  GLfloat attrArr[] =
     {
     0.5f, -0.5f, 0.0f,        1.0f, 1.0f, //右下
     -0.5f, 0.5f, 0.0f,        0.0f, 0.0f, // 左上
     -0.5f, -0.5f, 0.0f,       0.0f, 1.0f, // 左下
     0.5f, 0.5f, 0.0f,         1.0f, 0.0f, // 右上
     -0.5f, 0.5f, 0.0f,        0.0f, 0.0f, // 左上
     0.5f, -0.5f, 0.0f,        1.0f, 1.0f, // 右下
     };
     */
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稳捆,一起剝皮案震驚了整個濱河市酝掩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眷柔,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件原朝,死亡現(xiàn)場離奇詭異驯嘱,居然都是意外死亡,警方通過查閱死者的電腦和手機喳坠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門鞠评,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壕鹉,你說我怎么就攤上這事剃幌。” “怎么了晾浴?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵负乡,是天一觀的道長。 經(jīng)常有香客問我脊凰,道長抖棘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任狸涌,我火速辦了婚禮切省,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帕胆。我一直安慰自己朝捆,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布懒豹。 她就那樣靜靜地躺著芙盘,像睡著了一般驯用。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上何陆,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天晨汹,我揣著相機與錄音,去河邊找鬼贷盲。 笑死淘这,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的巩剖。 我是一名探鬼主播铝穷,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼佳魔!你這毒婦竟也來了曙聂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鞠鲜,失蹤者是張志新(化名)和其女友劉穎宁脊,沒想到半個月后吃靠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體配椭,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年羹铅,在試婚紗的時候發(fā)現(xiàn)自己被綠了霞捡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坐漏。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碧信,靈堂內(nèi)的尸體忽然破棺而出赊琳,到底是詐尸還是另有隱情,我是刑警寧澤砰碴,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布躏筏,位于F島的核電站,受9級特大地震影響衣式,放射性物質(zhì)發(fā)生泄漏寸士。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一碴卧、第九天 我趴在偏房一處隱蔽的房頂上張望弱卡。 院中可真熱鬧,春花似錦住册、人聲如沸婶博。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凡人。三九已至名党,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挠轴,已是汗流浹背传睹。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岸晦,地道東北人欧啤。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像启上,于是被迫代替她去往敵國和親邢隧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容