編輯:關於Android編程
OpenGL ES 1.0 和 1.1 :Android 1.0和更高的版本支持這個API規范。支持OpenGL ES 3.0的API需要實現設備生產廠家提供的圖形管道,所以一個Android4.3或者更高版本的設備可能並不支持OpenGL ES 3.0.
OpenGL ES 2.0 : Android 2.2(API 8)和更高的版本支持這個API規范。
OpenGL ES 3.0 : Android 4.3(API 18)和更高的版本支持這個API規范。
OpenGL ES 3.1 : Android 5.0(API 21)和更高的版本支持這個API規范。
Android在framework API和NDK都提供了對OpenGL的支持
OpenGL ES包:
1、OpenGL ES 1.0/1.1 API 包GLES10GLES10ExtGLES11GLES11Ext
android.opengl -- 這個包提供了OpenGL ES 1.0/1.1包含類的靜態接口,比javax.microedition.khronos 包裡的接口有更好的性能
javax.microedition.khronos.opengles -- 這個包裡提供了OpenGL ES 1.0/1.1的標准實現GL10GL10ExtGL11GL11ExtGL11ExtensionPack
2 . OpenGL ES 2.0的API類android.opengl.GLES20 -- 這個包提供了OpenGLES 2.0的接口,在Android2.2及以上版本可以使用。
GLES30GLES31GLES31Ext (Android Extension Pack)
3. OpenGL ES 3.0/3/1的API包
android.opengl -- 這個包提供了OpenGL ES 3.0/3.1的類接口。
為繪制對象映射坐標(Mapping Coordinates for Drawn Objects)
在Android設備上面展示圖形的一個基本問題是屏幕的尺寸和形狀都不同,OpenGL假設默認有一個統一的正方形坐標系,並將這些坐標繪制到通常不是正方形的屏幕上面,就像它是一個完美的正方形。
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
// make adjustments for screen ratio
float ratio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION); // set matrix to projection mode
gl.glLoadIdentity();// reset the matrix to its default state
gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); // apply the projection matrix
}
public void onDrawFrame(GL10 gl) {
...
// Set GL_MODELVIEW transformation mode
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();// reset the matrix to its default state
// When using GL_MODELVIEW, you must set the camera view
GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
...
}
在ES 2.0或者3.0的API裡面,應用投影和相機視圖時,首先要向圖形對象的頂點著色器添加一個矩陣成員對象,當矩陣對象添加後,就可以向對象生成和應用投影和相機視圖矩陣。
1. 向頂點著色器中添加矩陣 - 為view的投影矩陣創建一個變量,然後將它與著色器的position相乘。下面的著色器代碼,包含的uMVPMatrix成員允許你應用投影和相機視圖矩陣到使用這個著色器的對象上面。
private final String vertexShaderCode =
// This matrix member variable provides a hook to manipulate
// the coordinates of objects that use this vertex shader.
"uniform mat4 uMVPMatrix; \n" +
"attribute vec4 vPosition; \n" +
"void main(){ \n" +
// The matrix must be included as part of gl_Position
// Note that the uMVPMatrix factor *must be first* in order
// for the matrix multiplication product to be correct.
" gl_Position = uMVPMatrix * vPosition; \n" +
"} \n";
注意:上面的示例在頂點著色器中定義了一個矩陣變換成員,你可以給這個矩陣應用一個投影和相機視圖的結合矩陣。根據你的需求,可能會需要定義分開的投影矩陣和相機視圖矩陣成員,以方便分開自由的改變它們。
2. 訪問著色器矩陣 - 當你在頂點著色器中創建了hook之後,你可以訪問這個變量來應用投影和相機視圖矩陣。下面的代碼顯示了如何訪問頂點著色器中定義的矩陣變量:
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
...
muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
...
}
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
...
// Create a camera view matrix
Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
}
public void onSurfaceChanged(GL10 unused, int width, int height) {
GLES20.glViewport(0, 0, width, height);
float ratio = (float) width / height;
// create a projection matrix from device screen geometry
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
}
public void onDrawFrame(GL10 unused) {
...
// Combine the projection and camera view matrices
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
// Apply the combined projection and camera view transformations
GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
// Draw objects
...
}
紋理壓縮支持
紋理壓縮可以通過減少內存來顯著地提高OpenGL的性能,使內存使用的效率更高。Android framework提供了ETC1壓縮格式作為標准特性,包含了ETC1Util工具類和etctool壓縮工具(位於Android SDK下的
ATITC (ATC) - ATI紋理壓縮在許多設備上面都支持,它支持RGB紋理壓縮但不包含alpha通道,一些OpenGL擴展名可以代表這種格式,比如:
GL_AMD_compressed_ATC_texture
GL_ATI_texture_compression_atitc
PVRTC-PVRTC紋理壓縮在許多設備上面都支持,支持每個像素2位或者4位的紋理,包含或者不包含alpha通道都可以。下面的OpenGL擴展名可以代表這種格式,比如:
GL_IMG_texture_compression_pvrtc
S3TC (DXTn/DXTC)-S3有一些格式變化(從DXT1到DXT5),使用並不是很廣泛。它支持包含4位或者8位alpha通道的RGB紋理。下面的OpenGL擴展名可以代表這種格式,比如:
GL_OES_texture_compression_S3TC
GL_EXT_texture_compression_s3tc
GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_dxt3
GL_EXT_texture_compression_dxt5
3DC - 3DC紋理壓縮是比較少使用的支持包含alpha通道的RGB紋理,下面的OpenGL擴展名可以代表這種格式:
GL_AMD_compressed_3DC_texture
確定OpenGL擴展
OpenGL實現根據OpenGL ES API所支持的擴展而不同,這些擴展包含了紋理壓縮,但通常還包括其他OpenGL功能集的擴展。
通過下面方法可以確定特定的一個設備上面支持哪些紋理壓縮格式和OpenGL擴展:
1.在目標設備上面執行下面的代碼來確定設備支持哪些紋理壓縮格式,不同的機型上面結果不一樣,所以你應該在多個機型上面運行這個代碼,來確定哪些壓縮格式是被廣泛支持的:String extensions = javax.microedition.khronos.opengles.GL10.glGetString(GL10.GL_EXTENSIONS);2.查看這個方法的輸出,來確定設備支持哪些OpenGL擴展
boolean deviceSupportsAEP = getPackageManager().hasSystemFeature (PackageManager.FEATURE_OPENGLES_EXTENSION_PACK);
(一)概述Adapter是作為連接數據跟View之間橋梁的,你可以創建一個View來使用Adapter來對數據直接進行填充;(二)Adapter(適配器)的使用先來看看他
ScrollView滾動視圖ScrollView是繼承於FrameLayout,也是一個顯示容器,由於手機屏幕是有限的,當需要組件安排多組信息的時候,ScrollView
百度手機助手已經與中國電信達成深度合作協議,在全國范圍內推出免費WIFI服務。只要有中國電信Chinanet wifi熱點地方,百度手機助手用戶都可以免費連
1二維碼掃描登陸1,web端生成二維碼,傳遞uuid,並存入數據庫2,web端輪訓查詢信息,是否有數據庫掃描二維碼信息3,手機端掃描二維碼,獲取UUID,傳遞用戶名、密碼