OpenGL ES学习
来源:互联网 发布:淘宝账号怎么找回来 编辑:程序博客网 时间:2024/06/05 00:24
GLSurfaceView 用于创建一个OpenGL绘图的窗口
GLSurfaceView.Renderer 控制在窗口中绘制的内容
在OpenGL ES 中GLSurfaceView 更适合绘制一些full screen或者接近full screen的应用,对于只绘制一部分的,可以使用TextureView
要想使用OpenGL ES,就得先去实现GLSurfaceView 以及 GLSurfaceView.Renderer
下面是实现过程:
1. Declare OpenGL ES Use in the Manifest
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
GLSurfaceView 的作用类似于平时我们写的layout,可以直接通过
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); }}
类似于加载layout的方式加载进来。但是layout相当于是常量
但是在GLSurfaceView 中画什么,我们需要控制GLSurfaceView.Renderer来实现,也就是写一个类来实现GLSurfaceView.Renderer这一接口
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(); // Set the Renderer for drawing on the GLSurfaceView setRenderer(mRenderer); }}
在GLSurfaceView 中需要保证的基本代码有这些,主要是声明一个mRenderer 告知要用这个render来绘制。
需要注意的是: 可以加入以下这句话来提高代码速度
// Render the view only when there is a change in the drawing data setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
2. Build a Renderer Class
需要实现以下三个函数:
onSurfaceCreated() – 用于建立绘图的基本环境,只会被调用一次
onDrawFrame() – 每次需要重新绘图的时候都会被调用
onSurfaceChanged() –如果绘图窗口的形状发生改变时会被调用,比如手机屏幕旋转
一个最基本的实现是这样的
public class MyGLRenderer 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); }}
这个就是让屏幕全黑,因为初始化为GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
注意GL10 unused要设置,因为我们是基于OpenGL ES 2.0的接口
- 从零开始学习OpenGL ES
- opengl es学习
- OPENGL ES学习摘要
- OpenGL ES学习
- OpenGL ES学习 1
- OpenGL ES学习笔记
- Android 学习OpenGL ES
- OpenGL ES学习
- OPENGL ES 学习网站
- 学习OpenGL-ES: 2
- openGL ES学习一
- openGL ES学习二
- openGL ES学习四
- openGL ES学习五
- 学习OpenGL-ES: 2
- 学习OpenGL-ES: 0
- 学习OpenGL-ES: 1
- OpenGL ES学习笔记之一
- 自动布局autolayout和sizeclass的使用
- 【C语言学习1】C语言学习环境的搭建
- Openwrt安装ddns
- 远控病毒分析
- 40. Combination Sum II
- OpenGL ES学习
- 红黑树-java实现
- u-boot-2016.05移植:(2)、修改时钟 初始化sdram 重定位u-boot 配置smdk2440.h 修改u-boot.lds
- java框架篇---spring aop两种配置方式
- form表单post提交时中文乱码
- r语言中生成序列的函数
- DBUtils学习笔记一DbUtils
- HDU 5832 A water problem 【大数取模,Java 大数也不是万能的。。】
- Bitmap转Drawable