Android OpenGL教程 第六課

2021-05-24 02:39:31 字數 1882 閱讀 5579

android opengl 教程

第六課紋理對映:

在這一課裡,我將教會你如何把紋理對映到立方體的六個面。

激動的時刻來了,載入了。

複習一下android載入的知識。放乙個png到drawable裡面。新增乙個工具類,方便我們使用。

這樣我們是不是可以直接用

bitmap mbitmap = datamanage.getbitmap();

來獲得這個bitmap了,當然需要在activity裡面初始化這個datamanage。

datamanage.init(this.getresources());

好了,開始把bitmap放到opengl裡的紋理裡面。

intbuffer intbuffer = intbuffer.allocate(1);

gl.glgentextures(1, intbuffer);

首先讓opengl準備些紋理,這裡我們準備1個。glgentextures第二個引數要求是intbuffer,實際上就是乙個int陣列的變形,allocate幾個就有幾個紋理。

texture

= intbuffer.get();

取得opengl準備的紋理,為了後面把繫結到這個紋理裡面

gl.glbindtexture(gl10.

gl_texture_2d

, texture);

開始繫結這個2d紋理

bitmap mbitmap = datamanage.getbitmap();

glutils.teximage2d(gl10.

gl_texture_2d

, 0, mbitmap, 0);

這一句才重要,此紋理是乙個2d紋理( gl_texture_2d )。引數二代表影象的詳細程度,通常就由它為零去了。引數三是資料的成分數。引數四是邊框的值,一般就是「0」。據說openggl_es不支援紋理邊界,所以必須設定為0。

gl.gltexparameterx(gl10.

gl_texture_2d

, gl10.

gl_texture_min_filter

, gl10.

gl_linear);

gl.gltexparameterx(gl10.

gl_texture_2d

, gl10.

gl_texture_mag_filter

, gl10.

gl_linear);

下面的兩行告訴opengl在顯示影象時,當它比放大得原始的紋理大( gl_texture_mag_filter )或縮小得比原始得紋理小( gl_texture_min_filter )時opengl採用的濾波方式。通常這兩種情況下我都採用gl_linear 。這使得紋理從很遠處到離螢幕很近時都平滑顯示。使用gl_linear 需要cpu和顯示卡做更多的運算。如果您的機器很慢,您也許應該採用gl_nearest 。過濾的紋理在放大的時候,看起來馬賽克的很。您也可以結合這兩種濾波方式。在近處時使用gl_linear ,遠處時gl_nearest 。

有了紋理咋樣弄的立方體上去呢,這裡要用到紋理座標:

先看紋理座標陣列

privatefloat

mtextcoordarray=;

privatefloatbuffer

mtextcoordbuffer;

紋理的座標就是用了把紋理貼到面上的座標的對應關係

紋理的座標是

左下角0,0

左上角0,1

右下角1,0

右上角1,1

這裡面弄了12個面,表示六變形的12個面都畫紋理。

ondrawframe裡面新增的**如下

Android OpenGL教程 第四課

android opengl 教程 第四課旋 在這一課裡,我將教會你如何旋轉三角形和四邊形。左圖中的三角形沿y軸旋轉,四邊形沿著x軸旋轉。我們增加兩個變數來控制這兩個物件的旋轉。這兩個變數加在程式的開始處其他變數的後面。它們是浮點型別的變數,使得我們能夠非常精確地旋轉物件。浮點數包含小數字置,這意味...

Android OpenGL透視投影

首先申明下,本文為筆者學習 opengl es應用開發實踐指南 的筆記,並加入筆者自己的理解和歸納總結。1 透視除法 opengl會把每個gl position的x y和z分量都除以它的w分量。當w分量用來表示距離的時候,會使得較遠處的物體被移動到距離渲染區域中心更近的地方。新增w分量建立三維圖 p...

android openGL 兩種投影方式

投影變換是一種很關鍵的圖形變換,opengl中只提供了兩種投影方式,一種是正射投影,另一種是透視投影。不管是呼叫哪種投影函式,為了避免不必要的變換,其前面必須加上以下兩句 glmatrixmode gl projection glloadidentity 事實上,投影變換的目的就是定義乙個視景體,使...