初探OpenGL(一)
OPenGL ES 1.X 面向功能固定的硬件所涉及并提供加速支持,图形质量以及性能标准。
OpenGL ES2.X则提供包括着色器技术在内的全编程3D图形算法。----硬件要求比较高。
OpenGL ES-SC 专为有高安全型需求的特殊市场精心打造的。
OPenGL ES 与OpenGL的不同
1 浮点数和定点数
OPenGL ES 不支持double型双精度浮点数。有单精度浮点数代替。
2 引入新的定点数据类型
32位整型数据才存储,高16位表示整数,低16位表示小数。
浮点数乘以2的16次方------>转化为定点数;
定点数除以2的16次方,就转化成浮点数。
3 图元
OpenGL ES仅仅支持三角,线,点。
四角和多边形不支持。
4 变化和光照
OpenGL ES 丢弃颜色矩阵堆栈,并限定模型视图矩阵堆栈的深度为16;原生转化矩阵不被支持;纹路坐标不被支持。对于颜色,只支持RGBA模式,不支持索引色。
5 纹理映射
openGL ES仅仅支持2D纹理映射,但是1D映射可以用2D纹理来模拟。
3d----开销太大----摒弃。
openGL ES支持调色板纹理,这是一种高效纹理数据的方式。
6 帧缓存操作
只保留渲染缓存,累积缓存被丢弃。
OpenGL Demo1
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle; import com.doodev.chapter12.renderer.HelloOpenGLESRenderer; public class HelloOpenGLES extends Activity {
/**
* 这里是我们的OpenGL ES渲染View
*/
private GLSurfaceView mGLSurfaceView; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); /**
* 初始化OpenGL ES View
*/
mGLSurfaceView = new GLSurfaceView(this);
/**
* 设置渲染器为我们具体实现的渲染器
*/
mGLSurfaceView.setRenderer(new HelloOpenGLESRenderer()); setContentView(mGLSurfaceView);
} @Override
protected void onResume() {
super.onResume();
/**
* 这里需要同步调用OpenGL ES View的onResume操作, 通知底层OpenGL ES从挂起状态中返回
*/
mGLSurfaceView.onResume();
} @Override
protected void onPause() {
super.onPause();
/**
* 这里需要同步调用OpenGL ES View的onPause操作, 通知底层OpenGL ES停止后台更新,处于挂起状态
*/
mGLSurfaceView.onPause();
}
}
package com.doodev.chapter12.renderer;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10; public class HelloOpenGLESRenderer implements GLSurfaceView.Renderer { /**
*
* @Name onDrawFrame
* @Description TODO(绘图操作)
* @param gl
* @see android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
* @Date 2013-12-3 上午10:02:42
*
*/
@Override
public void onDrawFrame(GL10 gl) {
// 一般的opengl程序,首先要做的就是清屏
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); // 紧接着设置模型视图矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0); // 渲染物体
} /**
* @Name onSurfaceChanged
* @Description TODO(当窗口的大小发生改变时)
* @param gl
* @param width
* @param height
* @see android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10, int, int)
* @Date 2013-12-3 上午10:55:22
*
*/
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
/*设置OPenGL场景大小*/
gl.glViewport(0, 0, width, height); float ratio = (float) width / height;
//设置投影矩阵----为场景增加透视
gl.glMatrixMode(GL10.GL_PROJECTION);
//近似重置----将矩阵恢复到原始状态
gl.glLoadIdentity();
//设置视口大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
gl.glMatrixMode(GL10.GL_MODELVIEW);
}
/**
*
* @Name onSurfaceCreated
* @Description TODO(对openGL做初始化工作)
* @param gl
* @param config
* @see android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10, javax.microedition.khronos.egl.EGLConfig)
* @Date 2013-12-3 上午9:44:43
*
*/
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
/*告诉系统对透视进行修正*/
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
/*设置最亮的颜色
* arg1--red
* arg2--green
* arg3--blue
* 最小值0.0 做大1.0
* */
gl.glClearColor(1, 1, 1, 1);
/*设置阴影平滑*/
gl.glShadeModel(GL10.GL_SMOOTH);
/*设置深度缓存*/
gl.glClearDepthf(1.0f);
/*设置深度缓存*/
gl.glEnable(GL10.GL_DEPTH_TEST);
/*设置深度测试类型*/
gl.glDepthFunc(GL10.GL_LEQUAL); }
}
初探OpenGL(一)的更多相关文章
- 1.openGL 初探
GLEW, GLFW和GLM介绍 现在你有了工程,就让我们开始介绍下工程所用到的开源库和为啥需要这些. The OpenGL Extension Wrangler (GLEW)是用来访问OpenGL ...
- 初探 Qt Opengl【2】
最近在研究QOPengl QGraphicsView QGraphicsItemQGraphicsScene不过也只是皮毛,也不是做什么技术贴,就是记录一下自己在其中遇到的问题,和自己新学到的东西. ...
- 初探Qt Opengl【1】
最近一直在学习Qt的opengl绘图,看到好多资源都是关于以前的旧版本的, 我将我这几天学的的部分关于opengl的做个总结,也希望对需要学习的人有一定的帮助 在我的学习中,我主要用到一下三个方法 # ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- Android开发学习之路--Android系统架构初探
环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)
在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数.在本文中,我将演示一下如何编写自己的shader,同时, ...
- Mediapipe 在RK3399PRO上的初探(一)(编译、运行CPU和GPU Demo, RK OpenglES 填坑,编译bazel)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- [OpenGL超级宝典]专栏前言
我小时候的梦想呢,是做宇航员或者科学家或者是做一款属于自己的游戏,后来前面两个梦想都没有实现,于是我就来实现我的第三个梦想了,,,我呢,也算是零基础,因为我的专业是物联网工程,这个专业覆盖面之广,简直 ...
随机推荐
- 关于angularjs依赖注入的整理
初学angularjs阶段,刚刚看到菜鸟教程的angularjs依赖注入.现在整理一下: 1.含义:一个或更多的依赖(可以理解为模块关系依赖)或服务(分为内建服务[例如$http,$tiomeout等 ...
- scala优点以及eclipse上安装scala插件
可拓展 (面向对象,函数式编程) 静态类型化 (可检验,安全重构) 兼容JAVA (类库调用,互操作) 支持并发控制 (强计算能力,自定义其他控制结构) 语法简洁 (代码行短,类型推断,抽象控制) 插 ...
- Node.js API
Node.js v4.4.7 Documentation(官方文档) Buffer Prior to the introduction of TypedArray in ECMAScript 2015 ...
- flume从kafka读取数据到hdfs中的配置
#source的名字 agent.sources = kafkaSource # channels的名字,建议按照type来命名 agent.channels = memoryChannel # si ...
- Xcode-之Code Snippets Library
一.说明 Code Snippets Library 为代码片段库,在开发项目过程中经常会遇到一些重复的代码块,创建代码片段库可以减少我们开发的工作量,而且非常方便调用.Xcode系统中也为我们提供了 ...
- CascadeType
当Hibernate配置了(JPA注解) cascade = { CascadeType.PERSIST, CascadeType.MERGE } 调用保存时 session.save(user); ...
- PostgreSQL ----- No relations found.
本篇文章可能有错,尚未细细研究 运行\d出错: No relations found. \d只显示可见的表,也就是该数据库的schema在search_path中. SHOW search_path; ...
- 判断浏览器是否支持html5和css3属性
本文章内容是由一个前辈写的. CSS3特有的属性moz-Transform //判断是否具有相应属性 testProps: function (props) { var i; for (i in pr ...
- asp.net正则表达式去除a标签
if (drr["allow_a"].ToString() == "False") { cont = dr["news_Content"]. ...
- 2DToolkit官方文档中文版打地鼠教程
初始设置 创建一个Unity项目,并导入2D Toolkit插件. 导入完成后,在Project窗口会显示TK2DROOT文件夹(后续版本文件夹名称或许会有变动). 导入素材游戏,你可以从这里下载.下 ...