簡體   English   中英

適用於Android的最佳OpenGL ES語法

[英]Best OpenGL ES syntax for android

我運行一個SurfaceView游戲,其中角色和精靈可以沿網格移動N / S或E / W。 如今,這還不夠好,所以我決定在接下來的幾個月中將其轉換為GLSurfaceView。 我今年57歲,估計我的壽命不足以成為OpenGL專家。 要將位圖紋理繪制到設備屏幕,在SurfaceView中需要兩行代碼:

Bitmap bmp_background = BitmapFactory.decodeResource(getResources(), R.drawable.backgroundimage_2000_1000,options);
canvas.drawBitmap(bmp_background, null, new Rect(0, 0, screenWidth, screenHeight), null);

Java Code Geeks上的裸露“ OpenGL ES紋理映射”示例在GLSurfaceView中需要執行300行以上的觀察代碼才能完成此操作。

因此,我的策略是尋找完整的代碼示例,其中包括Main Activity以后的所有代碼,並從那里開始工作。 關於完整代碼示例的主要來源是Android Developer網站和Java Code Geeks網站上的教程。 不幸的是,每個站點使用的語法都大不相同。 我想知道語法的差異意味着什么,以及使用一種語法比另一種語法的優勢。 這是來自兩個站點的GLRenderer onDrawFrame方法的兩個代碼段:

developer.android.com:

public void onDrawFrame(GL10 unused) {
   GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
   android.opengl.Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
   android.opengl.Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
   mSquare.draw(mMVPMatrix);

javacodegeeks.com:

public void onDrawFrame(GL10 gl) {
   gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
   gl.glLoadIdentity();
   gl.glTranslatef(0.0f, 0.0f, -5.0f);
   square.draw(gl);

您提供的示例實際上是針對OpenGL ES 1.x和2.x的。 它們是完全不同的:ES 1(javacodegeeks示例)是具有固定功能管道的舊版本,而ES 2(developer.android示例)是具有可編程管道的較新版本。 可編程管線具有更好的圖形控件的優勢,使您可以實現更多的圖形效果,盡管它可能需要更多的代碼來設置,但它不像ES 1那樣受限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM