【Android】OpenGL ES for Android 教程1 - HelloWorld

本教程及后续教程全部参考或者转载于:OpenGL ES Tutorial for Android 

本例相当于openGL的HelloWorld程序。

先贴代码,代码中的注释比较具体了。

主Activity类:

package seven.demo.openglhelloworld;

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.Menu;

public class OpenGLDemo extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GLSurfaceView view = new GLSurfaceView(this);
        view.setRenderer(new OpenGLRenderer());
        setContentView(view);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_open_gldemo, menu);
        return true;
    }
}

OpenGLRenderer类,实现Renderer接口:

package seven.demo.openglhelloworld;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLU;

/**
 * 类描述: 功能详细描述:
 * 
 * @author mengsifan
 * @date [2012-8-29]
 */
public class OpenGLRenderer implements Renderer {

    /**
     * {@inheritDoc} 在这个方法中主要用来设置一些绘制时不常变化的参数,比如:背景色,是否打开 z-buffer等。
     */

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // 设置背景色
        gl.glClearColor(.0f, .0f, .0f, .5f);
        /*
         * 设置着色模式。参数mode可以是GL_SMOOTH(默认值)或GL_FLAT。
         * 采用恒定着色时(即GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元。
         */
        gl.glShadeModel(GL10.GL_SMOOTH);
        // Depth buffer setup.
        gl.glClearDepthf(1.0f);
        // Enables depth testing.
        gl.glEnable(GL10.GL_DEPTH_TEST);
        // The type of depth testing to do.
        gl.glDepthFunc(GL10.GL_LEQUAL);
        // Really nice perspective calculations.
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);

    }

    /**
     * {@inheritDoc} 如果设备支持屏幕横向和纵向切换,这个方法将发生在横向<->纵向互换时。此时可以重新设置绘制的纵横比率。
     */

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        /*
         * glViewport(GLint x,GLint y,GLsizei width,GLsizei height)为其函数原型。
         * X,Y————以像素为单位,指定了视口的左下角位置。
         * width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。
         */
        gl.glViewport(0, 0, width, height);
        /*
         * glMatrixMode设置当前矩阵模式 :
         * GL_MODELVIEW:对模型视景矩阵堆栈应用随后的矩阵操作。
         * GL_PROJECTION:对投影矩阵应用随后的矩阵操作。  
         * GL_TEXTURE:对纹理矩阵堆栈应用随后的矩阵操作。
         * 注意:与glLoadIdentity()一同使用。
         */
        gl.glMatrixMode(GL10.GL_PROJECTION);
        // 重置当前指定的矩阵为单位矩阵
        gl.glLoadIdentity();
        // 计算窗口宽高比例
        GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f,
                100.0f);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();

    }

    /**
     * {@inheritDoc} 定义实际的绘图操作。
     */

    @Override
    public void onDrawFrame(GL10 gl) {
        /*
         * 可以使用 "|"运算符组合不同的缓冲标志位,表明需要清除的缓冲。 例如glClear(GL_COLOR_BUFFER_BIT |
         * GL_DEPTH_BUFFER_BIT)表示要清除颜色缓冲以及深度缓冲。
         */
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    }

}

转载于:https://www.cnblogs.com/sifan/archive/2012/08/29/2661919.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值