初探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超级宝典]专栏前言
我小时候的梦想呢,是做宇航员或者科学家或者是做一款属于自己的游戏,后来前面两个梦想都没有实现,于是我就来实现我的第三个梦想了,,,我呢,也算是零基础,因为我的专业是物联网工程,这个专业覆盖面之广,简直 ...
随机推荐
- 3、XCode: 如何添加自定义代码片段
我们经常会定义一些retain的property,而且大概每次我们都会像这样写: @property (nonatomic, retain) Type *name; 每次都要老老实实的把“@prope ...
- 《C程序设计语言》 squeeze函数(从字符串s中删除字符c)
squeeze void squeeze(char string[], int ch) { int i, j; ; string[i] != '\0'; i++) { if (string[i] != ...
- Mysql表结构定义及相关语法
mysql语法及相关命令1.每个sql命令都需要使用分号来完成2.可以将一个命令写成多行3.可以通过\c来取消本行命令4.可以通过\g.exit.ctrl+c或者quit来退出当前客户端5.可以通过使 ...
- String类之indexOf--->查找某字对应的位置
以下方法都是java内置类String类的内置方法(不是构造方法哦,就是普通的方法),不需要我们写,直接拿过来用即可. indexOf方法对应Api介绍 lastIndexOf方法对应Api介绍 -- ...
- php 原生能力进阶
<?php header("Content-type:text/html;charset=utf-8"); $arr=200; $result =($arr%2==0||$a ...
- 使用 Spark MLlib 做 K-means 聚类分析[转]
原文地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice4/ 引言 提起机器学习 (Machine Lear ...
- Dokan官方说明文档
Dokan 库Copyright(c) Hiroki Asakawa http://dokan-dev.net/en 什么是Dokan库================================ ...
- linux php安装
Linux下配置安装PHP环境 参考别人的做法,遇到问题上网查,下面就是安装步骤. 一.安装Apache2.2.221.到官网下载 http://httpd.apache.org/download. ...
- hdu_5818_Joint Stacks(线段树模拟)
题目链接:hdu_5818_Joint Stacks 题意: 给你两个栈,多了个合并操作,然后让你模拟 题解: 很容易想到O(1)的单个栈操作,O(n)的合并操作,这样肯定超时,所以我们要将时间复杂度 ...
- bug记录_document.defaultview.getcomputedstyle()
页面中使用document.defaultview.getcomputedstyle()在火狐下取不到值. 原本方法现在$(document).ready()中,换到window.onload里就可以 ...