繁体   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