OPENGL 入门
- 检测设备支持版本,判断是否支持opengl 2.0版本
- 初始化设置OpenGLES2.0
- 实现接口GLSurfaceView.Renderer 渲染
- 绘制图形
1、检测设备支持版本,判断是否支持opengl 2.0版本
private boolean hasGLES20(){
ActivityManager activityManager=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo info=activityManager.getDeviceConfigurationInfo();
return info.reqGLEsVersion>=0x20000;
}
2、强制应用支持
<uses-feature android:glEsVersion="0x00020000"
android:required="true"/>
3、初始化设置OpenGLES2.0
@Override
protected void onCreate(Bundle savedInstanceState){
//设置全屏模式
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
if(hasGLES20()){
GLSurfaceView mGLView=new GLSurfaceView(this);
mGLView.setEGLContextClientVersion(2);
//保留OpenGLESs上下文
mGLView.setPreserveEGLContextOnPause(true);
mGLView.setRenderer(new GLES20Renderer());
}
super.onCreate(savedInstanceState);
setContentView(mGLView);
} //要正常工作,OpenGL 的生命周期要跟Activity 对应上
@Override
protected void onResume() {
super.onResume();
if (mGLView!=null){
mGLView.onResume();
}
} @Override
protected void onPause() {
super.onPause();
if (mGLView!=null){
mGLView.onPause();
}
}
4、GLSurfaceView.Renderer 渲染器,实现接口GLSurfaceView.Renderer 渲染
public abstract class GLRenderer implements GLSurfaceView.Renderer{
private boolean mFirstDraw;
private boolean mSurfaceCreated;
private int mWidth;
private int mHeight;
private long mLastTime;
private int mFPS;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
mSurfaceCreated=true;
mWidth=-1;
mHeight=-1;
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
if (!mSurfaceCreated&&width==mWidth&&height==mHeight){
return;
}
mWidth=width;
mHeight=height;
onCreate(mWidth,mHeight,mSurfaceCreated);
mSurfaceCreated=false;
}
@Override
public void onDrawFrame(GL10 gl) {
onDrawFrame(mFirstDraw);
if (mFirstDraw){
mFirstDraw=false;
}
}
public abstract void onCreate(int width,int height,boolean contextLost);
public abstract void onDrawFrame(boolean firstDraw);
public int getFPS(){
return mFPS;
}
}
5、绘制图形
public class GLES20Renderer extends GLRenderer {
@Override
public void onCreate(int width, int height,
boolean contextLost) {
GLES20.glClearColor(0f, 0f, 0f, 1f);
}
@Override
public void onDrawFrame(boolean firstDraw) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT
| GLES20.GL_DEPTH_BUFFER_BIT);
}
}
OPENGL 入门的更多相关文章
- MFC下OpenGL入门(可以用)
MFC下OpenGL入门 源文件 1, 建一工程文件,我这里命名为first,现在first工程里面我们没有添加任何东西,所有的东西都是MFC自动帮我们创建的. 2, 添加链接库.这一步很关键.打开菜 ...
- opengl入门学习
OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...
- OpenGL入门学习(转)
OpenGL入门学习 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#includ ...
- [转]opengl入门例题(读取bmp图片,并显示)
#include<gl/glut.h> #define FileName "bliss.bmp" static GLint imagewidth; static GLi ...
- OpenGL入门学习(转载)
说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...
- SCARA——OpenGL入门学习五六(三维变换、动画)
OpenGL入门学习(五) 此课为三维变换的内容,比较枯燥.主要是因为很多函数在单独使用时都不好描述其效果, 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1到1,还只能 ...
- SCARA——OpenGL入门学习四(颜色)
OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...
- SCARA——OpenGL入门学习三
OpenGL入门学习[三] 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用 ...
- OpenGL入门学习(三)
http://developer.178.com/201103/94954704639.html 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点 ...
- OpenGL入门1.4:纹理/贴图Texture
每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 游戏玩家对Texture这个词应该不陌生,我们已经知道了怎么为每个顶点添加颜色来增加图形的细节,但,如果想让图形看起来更真实 ...
随机推荐
- MYSQL 游标学习及使用实例
who?(游标是什么?)游标(cursor)官方定义:是系统为用户开通的一个数据缓冲区,存放sql执行结果.每个游标区都有一个名字,用户可以通过sql语句逐一从游标中获取记录,并赋值给变量,交由主语言 ...
- OS之进程和线程
1. 线程是程序执行流的最小单元. 一个标准的线程由线程ID,当前指令指针PC,寄存器集合和堆栈组成. 2. 通常意义上,一个进程由一个到多个线程组成,各个线程之间共享程序的的内存空间,包括代码段.数 ...
- 【SVN搭建】搭建SVN服务
1.安装 # yum -y install subversion 2.配置 创建仓库 我们这里在/opt下建立一个名为svn的仓库(repository),所有代码都可以放在这个下面,创建成功后在sv ...
- WebMvcConfigurationSupport 避坑指南
通过返回WebMvcConfigurationSupport 的方式, 默认会覆盖 Spring boot的自动配置, 导致配置失效静态资源无法访问:但是在WebMvcConfigurationadp ...
- iOS中截取字符串指定位置
直接上代码: NSString *string = @"今天是个好日子,忘记穿秋裤了"; NSString *string1 = [];//截取掉下标7之后的字符串 NSStrin ...
- Android 程序分析环境搭建-静态分析环境搭建
1.2 静态分析环境搭建 这里主要讲一些用的比较顺手的工具,一并列出来,Uaa,等环境配置, 2,notepad++ ,everything , Jdgui ,idea, ida ,Fiddler , ...
- 搭建Vue开发环境
1.安装Node.js 安装包下载地址: https://nodejs.org/en/ 安装时可以选择是否自动安装必要的工具,如Chocolatey.Python2,这里我选择了自动安装 Node.j ...
- 12c分区增强功能,新功能(文档ID 1568010.1)
12c Partitioning Enhancements, New Features (Doc ID 1568010.1) APPLIES TO: Oracle Database - Enterpr ...
- Java之StringBuilder类
StringBuilder类的由来 由于String类的对象内容不可改变(底层是一个被final修饰的数组),所以每当我们进行字符串拼接时,总是会在内存中创建一个新的对象.如果对字符串进行拼接操作,每 ...
- (day65、66)Vue基础、指令、实例成员、JS函数this补充、冒泡排序
目录 一.Vue基础 (一)什么是Vue (二)为什么学习Vue (三)如何使用Vue 二.Vue指令 (一)文本指令 (二)事件指令v-on (三)属性指令v-bind (四)表单指令v-model ...