构建OpenGL ES环境

2018-11-17  本文已影响0人  一个不凡的人

为了在Android Application中使用OpenGL ES绘制图形。您必须为它门创建一个视图容器。其中直接的方法就是实现GLSurfaceViewGLSurfaceView.RendererGLSurfaceView是使用OpenGL绘制图形的视图容器,GLSurfaceView.Renderer控制在该视图中绘制的内容。有关这些类的更多信息,请参阅OpenGL ES开发人员指南。

GLSurfaceView只是应用程序包含OpenGL ES图形的一种方法。对于全屏或接近全屏图形视图,这是一个合理的选择。如果您想在Layout的某一部分包含OpenGL ES图形,因该看下TextureView。您也可以使用SurfaceView构建OpenGL ES视图,这需要编写相当多的额外代码。

要使用OpenGL ES,需在AndroidManifest.xml中声明。

使用OpenGL ES 2.0 API 这样声明:

<uses-feature android:glEsVersion="0x00020000" android:required="true" />

如果还要使用纹理压缩,还要添加以下声明:

<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
<supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />

为OpenGL ES创建Activity:

public class OpenGLES20Activity extends Activity {

    private GLSurfaceView mGLView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity.
        mGLView = new MyGLSurfaceView(this);
        setContentView(mGLView);
    }
}

注意:OpenGL ES 2.0需要Android 2.2(API级别8)或更高版本,因此请确保您的Android项目以该API或更高版本为目标。

创建GLSurfaceView object

class MyGLSurfaceView extends GLSurfaceView {

    private final MyGLRenderer mRenderer;

    public MyGLSurfaceView(Context context){
        super(context);

        // Create an OpenGL ES 2.0 context
        setEGLContextClientVersion(2);

        mRenderer = new MyGLRenderer();

        // 设置渲染器
        setRenderer(mRenderer);
    }
}

你还可以设置渲染器模式:

/*仅在绘图数据发生更改时才渲染视图*/
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

创建Renderer:控制关联GLSufaceView的绘制内容

public class MyGLRenderer implements GLSurfaceView.Renderer {

    /**
    *设置视图的OpenGL ES环境时调用一次
    */
    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    }

    /**
    *每次重绘都会调用
    */
    public void onDrawFrame(GL10 unused) {
        // Redraw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    }

    /**
    *视图的几何图形发生更改(例如,设备的屏幕方向更改时),则调用此方法。
    */
    public void onSurfaceChanged(GL10 unused, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
    }
}

上面的代码示例创建了一个简单的Android应用程序,它使用OpenGL显示黑屏。 虽然这段代码没有做任何有趣的事情,但通过创建这些类,您已经奠定了开始使用OpenGL绘制图形元素所需的基础。

上一篇下一篇

猜你喜欢

热点阅读