Building an OpenGL ES Environment

为了在安装程序中使用OPEN GL ES绘制图形,你必须为它们创建一个VIEW容器。

其中一个直接了当的方式是实现一个GLSurfaceView 和一个GLSurfaceView.Renderer

GLSurfaceView是一个VIEW容器,为了使用OPEN GL 绘制图形的容器。GLSurfaceView.Renderer

控制在VIEW里绘制什么。为了获取更多信息参考OPENGL ES开发指导书。

GLSurfaceView仅仅是一条路在你的应用程序里。为了一个全屏的或几乎全屏的图形视图,这个是可行的选择。

若开发者想要绘制一个OPENGL ES图形在一片小的区域,应该使用TextureView。实际上,自己动手的开发者,

可以使用TextureView建立一个OPENGL ES VIEW,但是需要额外写不少代码。

这节课解释在一个简单的程序中如何完成最小实现的GLSurfaceView 和GLSurfaceView.Renderer


一 在MAINFEST里声明OPENGL ES使用

为了你的程序使用OPENGL ES 2.0 API,你必须添加下面的声明到你的manifest:

<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" />
更多的纹理格式压缩,参考OPEN GL 开发者手册

二 为OPENGL ES图形创建一个活动

使用OPENGL ES的安卓程序有活动,就像任何其他程序使用一个用户接口。和其他程序主要的不同是为你的活动你放置什么到LAYOUT中。与此同时,

在许多程序中你可以使用TextView,Button,ListView,在你的APP里,你也可以增加一个GLSurfaceView。

下面的示例代码显示一个最小实现的活动。

public class OpenGLES20 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);
    }
}

三 建立一个GLSurfaceView对象


GLSurfaceView是一个特殊的VIEW,在它里面可以绘制OPENGL ES图形。它本身没有做太多。对象的真实绘制时在GLSurfaceView.Renderer中被控制。

只是在这个VIEW中显示。实际上,这个对象的代码如此之少,你可能试图跳过它,只需创建一个不能修改的GLSurfaceView实例,但是不这样做。

你需要扩展这个类,为了捕获一个触摸事件,这个事件处理在后面的章节学习。

GLSurefaceView必要的代码是很少的,所以快速实现,它通常只是创建一个内部类而使用它:

class MyGLSurfaceView extends GLSurfaceView {

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

        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(new MyRenderer());
    }
}
当你使用OPENGL ES2.0时,你必须增加另外一个调用你的GLSurfaceView构造,

// Create an OpenGL ES 2.0 context
setEGLContextClientVersion(2);
注意:若你使用OPEN GL2.0API你必须在你的程序MANIFEST中声明,更多的讯息查看 Declare OpenGL ES Use in the Manifest


另外一个可选的增加项到你的GLSurfaceView实现是设置一个REANDER 模式去仅仅绘制VIEW,当一个

// Render the view only when there is a change in the drawing data
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
当你调用requestRender()函数时,此设置可以防止 GLSurfaceView框架从新绘制,对这个示例程序是非常有效的。


四 构建一个RENDERER类

GLSurfaceView.Renderer类,这个类控制在GLSurfaceView上绘制什么,在renderer理由三种方法被安卓系统调用,绘制什么和在GLSurfaceView上

如何绘制。

onSurfaceCreated()函数--一次调用设置一个VIEW的OPENGL ES环境;

onDrawFrame()函数--每次调用重新绘制VIEW

onSurfaceChanged()函数--如果几何图形的视图发生改变,例如,设备屏幕方向发生变化,则被调用

这里有一个基本的OPEN GL ES RENDERER的实现,和在GLSurfaceView绘制灰色背景相比,它不做任何事情


public class MyGL20Renderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
        // Set the background frame color
        GLES20.glClearColor(0.5f, 0.5f, 0.5f, 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);
    }
}


from:http://developer.android.com/training/graphics/opengl/environment.html#renderer



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值