最近有人问OpenGL ES 的使用,我通过几行代码演示一下。

不需要讲 来源 历史或大篇前奏。。

通过短短的一段就能迅速理解OpenGL ES 初步使用方法,对OpenGL ES 有了大概的概念和感知。

和其他view的使用一样:

 

 
public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        GLSurfaceView glSurfaceView = (GLSurfaceView) findViewById(R.id.gl_view);        glSurfaceView.setRenderer(new MyRender());    }}

是不是很简单。。。。setRenderer(); 就算完成了.

 

发现了重点,所有的绘制都在MyRender() 这个类里。。。。先不急着讲MyRender(),分析一下OpenGL ES的使用步骤:

①创建GLSurfaceView组件,并使用Activity来显示。

②为GLSurfaceView组件创建一个MyRender实例,并实现GLSurfaceView.Renderer 接口的三个方法。

public class MyRender implements GLSurfaceView.Renderer {

}

③调用GLSurfaceView的setRenderer(new MyRender());方法。此Renderer对象将完成GLSurfaceView的3D图形绘制。

 

实际的使用中,难点在Renderer类。下面讲一下Renderer的结构。

 

import android.opengl.GLSurfaceView;import javax.microedition.khronos.egl.EGLConfig;import javax.microedition.khronos.opengles.GL10;/** * Created by Administrator on 2017/3/8. */public class MyRender implements GLSurfaceView.Renderer {    /**     * 当SurfaceView创建的时候,系统会回调这个方法     * 该方法可以对SurfaceView执行一些无变化的初始化操作     * @param gl10     * @param eglConfig     */    @Override    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {        gl10.glDisable(GL10.GL_DITHER);//关闭抗抖动//禁用某些功能        // 设置系统对透视进行修正 // 对某方面修正        gl10.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);        gl10.glClearColor(0,0,0,0);// 设置清屏用的颜色,RGBA        // 设置阴影为平滑模式        gl10.glShadeModel(GL10.GL_SMOOTH);// 设置阴影模式        // 启用深度测试即Z轴 //与glDisable相反,启用。        gl10.glEnable(GL10.GL_DEPTH_TEST);        // 设置深度测试的类型        gl10.glDepthFunc(GL10.GL_LEQUAL);    }    /**     * 此初始化为SurfaceView大小变化时初始化调用     * 多用于3D场景初始化     * @param gl10     * @param width     * @param height     */    @Override    public void onSurfaceChanged(GL10 gl10, int width, int height) {        gl10.glViewport(0, 0, width, height);//设置3D视窗的大小及位置        gl10.glMatrixMode(GL10.GL_PROJECTION);//当前矩阵模式设置为投影矩阵        gl10.glLoadIdentity();// 初始化单位矩阵        float ratio =(float)width/height;//计算视窗的宽高比        gl10.glFrustumf(-ratio,ratio,-1,1,1,0);//设置透视窗的空间大小    }    @Override    public void onDrawFrame(GL10 gl10) {        gl10.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);//清除屏幕缓存和深度缓存        // 下面就开始用GL10绘制自己想要的图形了            }}


此时在回顾一下OpenGL ES的使用步骤:

 

 

①创建GLSurfaceView组件,并使用Activity来显示。

②为GLSurfaceView组件创建一个MyRender实例,并实现GLSurfaceView.Renderer 接口的三个方法。

public class MyRender implements GLSurfaceView.Renderer {

}

③调用GLSurfaceView的setRenderer(new MyRender());方法。此Renderer对象将完成GLSurfaceView的3D图形绘制。

第二步应该就明白了。。。。

实现GLSurfaceView.Renderer 接口然后实现它的三个方法。。两个初始化方法,一个绘制方法。

初始化比如设置我们窗口打开是否启用Z轴,是否有边框,是否有阴影,每绘制一层都要清屏,我们用什么颜色清屏,窗口打开时的大小,窗口的某些功能是不是需要关闭等等。一系列的初始化设置。。。

然后onDrawFrame方法开始根据设置好的坐标开始绘制图形了。。。

绘制之前调用gl10.glClear 来清屏。然后再绘制。

具体绘制下篇再写,绘制需要设置每个顶点的坐标和颜色值,接下来就是机械式的寻找各点坐标,设置各个点的 float[] 数组。

3D图形 顶点多 坐标多,此篇理解了,下一步就是放坐标数据。。分开不容易乱。。。

下一篇在onDrawFrame方法中加入坐标数据开始绘制。。


熬夜写教程不容易,
如果你欣赏我的代码,
可以赞赏我几块钱买个新键盘。

 

更多相关文章

  1. Android(安卓)paint类介绍
  2. Android设置Settings:PreferenceFragment(2)
  3. Android获取各种路径方法以及对路径的解释
  4. Android动态换肤开源库Colorful发布
  5. android 动态折线图
  6. android 开发板开发环境搭建及调试大概过程
  7. Android(安卓)studio cannot resolve symbol xxx的解决方法
  8. java 课堂总笔记
  9. Android(安卓)Bitmap Api总结和使用方法

随机推荐

  1. Android对px和dip进行尺寸转换的方法
  2. MaterialDesign中控件属性表
  3. Android下soap访问webservice
  4. Android(安卓)ActivityGroup和TabActiviy
  5. Android打开外部DB文件
  6. Android(安卓)Intent的几种用法
  7. android 音量调节时,嘟 的 发声位置
  8. Android开发之修改标题栏样式
  9. Android之SharedPreferences对参数数据的
  10. android警告 —— This Handler class sh