Android OpenGL ES: 第一个程序

1. 概要

OpenGL是桌面环境下的绘制,渲染三维图形的API。

OpenGL ES是在Android环境下的OpenGL。

在Android中OpenGL需要在GLSurfaceView中渲染,渲染控制函数在GLSurfaceView.Renderer中。接下来会介绍如何创建第一个OpenGL程序


2. 配置AndroidManifest

(1)声明OpenGL ES API
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
(2)如果在APP中用到纹理,需要声明采用纹理的格式
<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
<supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.firstglsurfaceview">
    <uses-feature android:glEsVersion="0x00020000" />
    <uses-sdk android:targetSdkVersion="11"/>
    <application
            android:label="@string/app_name">
        <activity android:name="FirstGLActivity"
                android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                android:launchMode="singleTask"
                android:configChanges="orientation|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

3. 创建一个OpenGL Project

3.1 创建Activity

只需要在Activity中设置一个GLSurfaceView即可。

FirstGLSurfaceView继承于GLSurfaceView

public class FirstGLActivity extends Activity {

    private FirstGLSurfaceView mGLView;

    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        mGLView = new FirstGLSurfaceView(getApplication());
        setContentView(mGLView);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mGLView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGLView.onResume();
    }
}

3.2 创建GLSurfaceView

此部分需要声明OpenGL版本,设置Renderer

class FirstGLSurfaceView extends GLSurfaceView {

    private final FirstGLRenderer mRenderer;

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

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

        mRenderer = new MyGLRenderer();

        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(mRenderer);
    }
}

3.3 创建Render

GLSurfaceView.Renderer是OpenGL ES最重要的一部分,设置OpenGL环境,绘制OpenGL都是在Renderer中完成。

Render实现了GLSurfaceView.Renderer接口,需要实现3个函数:
onSurfaceCreated() - Surface创建时会触发此事件,在此事件中需要完成OpenGL的初始化工作。
onDrawFrame() - 更新OpenGL绘制的内容
onSurfaceChanged() - 当Surface大小改变时触发此事件,比如方向改变等。

如果您了解桌面环境下OpenGL编程,那么我们可以将其与GLUT创建的OpenGL程序对应起来(参见第一个OpenGL程序)。

onSurfaceCreated  --- init

onDrawFrame  --- display


public class FirstGLRenderer implements GLSurfaceView.Renderer {

    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);
    }
}



4. 参考文献

[1] Google Android API, http://developer.android.com/training/graphics/opengl/environment.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值