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这个词应该不陌生,我们已经知道了怎么为每个顶点添加颜色来增加图形的细节,但,如果想让图形看起来更真实 ...
随机推荐
- crontab 定时任务没有响应 检测步骤
设置规则 # 每分钟执行一次 */1 * * * * /scripts/script.sh # 每小时执行一次 0 */1 * * * /scripts/script.sh # 每天 02:00 执行 ...
- Jmeter 查看结果树之界面功能介绍 [8]
查看结果树显示所有请求响应的树,通过它可以查看任何请求的响应.除了显示响应之外,还可以查看获取响应所花费的时间以及一些响应代码.需要通过"查看结果树"来查看服务器处理请求之后的返回 ...
- 分布式图数据库 Nebula RC2 发布:增强了 CSV Importer 功能
Nebula Graph 是开源的分布式图数据库,可应用于知识图谱.社交推荐.风控.IoT 等场景. 本次 RC2 主要新增 GO FROM ... REVERSELY 和 GROUP BY 等语句, ...
- python中time.strftime不支持中文,报错UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: encoding error
使用time.strftime将 "2020-10-10 10:10:10" 转化为 2020年10月10日10时10分10 报错: import time timestr=&q ...
- Java异常及异常处理
如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法.在这种情况下会抛出一个封装了错误信息的对象.此时,这个方法会立刻退出同时不返回任何值.另外,调用这个方法的其他代码也无法继续执行, ...
- CAD图纸怎么看?这两种方法值得看
在CAD日常的工作中,每天都是需要接触到CAD图纸文件,有一些房屋设计.建筑施工图.室内家具设计图纸等,这些CAD图纸的格式均为dwg格式的.是不能够直接进行打开查看的,需要借助CAD看图软件来使用. ...
- 系统架构师考试知识点mp3资料免费下载
场景 系统架构设计师考试,属于全国计算机技术与软件专业技术资格考试(简称计算机软件资格考试)中的一个高级考试. 系统架构设计师考试,考试不设学历与资历条件,不论年龄和专业,考生可根据自己的技术水平,选 ...
- vue如何debugger源码
在我们阅读vue源码时,一般引用vue的版本都是打包编译后的版本,无法debugger源码,要debugger源码,就需要给代码添加sourcemap,他存储源码与编译后代码的一种对应关系,详细内容可 ...
- 关于字符串的格式化----format与%
格式化字符串一般有两种方法 1.%(d整数,s字符,f浮点数) 2.format 用处极为广泛且限制不多 注意:第一种对于数组的传递会报TypeError,所以必须传递数组 a = (1, 2, 3) ...
- mysql登录错误:'Access denied for user 'root'@'localhost'
首先是不知道怎么忽然mysql用命令行,workbench都登录不了,都提示'Access denied for user 'root'@'localhost'. 数据库卸载重装了几次都不行.好像感觉 ...