Android OpenGL es 紋理座標設定與貼圖規則

來源:互聯網
上載者:User

http://blog.csdn.net/cjkwin/article/details/6016224

當opengl對一個四方形進行貼圖時,會定義紋理貼圖座標,一串數組,相信初學openggl es者看到後會很頭疼,不知道寫得是什麼東西。現在就將我的研究成果與大家分享下!

當紋理映射啟動後繪圖時,你必須為OpenGL ES提供其他資料,即頂點數組中各頂點的紋理座標。紋理座標定義了映像的哪一部分將被映射到多邊形。它的工作方式有點奇怪。 

下面看下在android平台下Opengl紋理系統座標,左下角為原點。

我們現在討論怎樣使用這些紋理座標。當我們指定頂點數組中的頂點時,我們需要在另一個數組中提供紋理座標,它稱為紋理座標數組。這裡需要注意定義座標數組順序,這很關鍵。

 

 

 

float texCoords[]
= new float[] {
        // FRONT
        0.0f, 0.0f,
        1.0f, 0.0f,
        0.0f, 1.0f,
        1.0f, 1.0f,
  };

效果如下:

 

如果我們想截取圖片有上角不分做紋理,按照上面方法可獲的數組

float texCoords[]
= new float[] {
   // FRONT
           0.5f, 0.5f,
          1f, 0.5f,
          0.5f, 1f,
          1f, 1f
  };

效果如下:

 

 

我們看下貼圖的原始檔案

你會發現截屏中的圖片y軸是顛倒的,其實這是android映像座標系統與Opengl
es 座標系統不一致導致的。最簡單的修正辦法將原始圖片用工具翻轉過來,這樣會比用程式翻轉節省很多效能,資源是寶貴的。

三角形紋理映射,只要按照我們的映射規則,便可以順利完成映射。

float texCoords[]
= new float[] {   
     0.0f, 0.0f,
     1.0f, 0.0f,
     0.5f, 1.0f,
};

效果:

 

看到這裡應該知道紋理座標數組規則定義的意義了吧。

 

平鋪與箔拉

我們的紋理座標系統在兩個軸上都是從0.0
到 1.0,如果設定超出此範圍的值會怎麼樣?根據視圖的設定方式有兩種選擇。

平鋪(也叫重複)
一種選擇是平鋪紋理。按OpenGL的術語,也叫“重複”。如果我們將第一個紋理座標數組的所有1.0改為2.0:
    static const GLfloat texCoords[] = {
        0.0, 2.0,
        2.0, 2.0,
        0.0, 0.0,
        2.0, 0.0
    };

我們可以通過glTexParameteri()函數設定。

glTexParameterf(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);

 

箝位
另一種可能的選擇是讓OpenGL ES簡單地將超過1.0的值限制為1.0,任何低於0.0的值限制為 0.0。這實際會引起邊沿像素重複。

我們可以通過glTexParameteri()函數設定。

glTexParameterf(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.