OpenGLES2.0原理浅析
来源:互联网 发布:淘宝联盟ios历史版本 编辑:程序博客网 时间:2024/06/03 15:29
1.
2.
每种变换都可以由相应的Matrix静态方法生成相应的变换矩阵。 坐标系原点在屏幕中央,z轴正方向垂直屏幕向外。
行为
变换
记录变换方式的放法
记录变换方式的[4*4]矩阵
眼睛相对物体的位置改变
视图变换
Matrix.setLookAtM(mVMatrix,
cx, cy, cz,//相机位置,
tx, ty, tz,//观察点位置
upx, upy, upz//顶部朝向
)
mVMatrix[16]
物体平移
模型变换
Matrix.translateM(
mMMatrix,
0,//偏移量
x, y, z//平移量
)
mMMatrix[16]
物体按坐标缩放比例缩放
Matrix.scaleM(
mMMatrix,
sx,sy, sz//缩放因子
)
物体旋转
Matrix.rotateM(
mMMatrix,
0,//偏移量
angle,//旋转角度
x, y, z//需要旋转的轴
)
凸透镜眼睛
投影变换
Matrix.frustumM(
mPMatrix,
0,//偏移量
left,right,
buttom,top,
near,far//near>0
)
mPMatrix[16]
平面透镜眼睛
Matrix.orthoM(
mPMatrix,
0,//偏移量
left,right,
buttom,top,
near,far//near>0
)
PS: 如果眼睛不是凸透镜而是平面透镜, 则不会产生近小远大的效果, 视图变换可由人眼模拟。函数参数都是float。
变换叠加: 可通过变换矩阵相乘得出想要的变换矩阵: Matrix.multiplyMM(
mMVPMatrix,
0,
3.
点
GLES20.GL_POINTS
线
GLES20.GL_LINES
GLES20.GL_LINE_STRIP
GLES20.GL_LINE_LOOP
面
GLES20.TRIANGLES
GLES20.TRIANGLE_TRIP//条带,可间断
GLES20.TRIANGLE_FAN//扇面
非索引法: GLES20.glDrawArrays(GLES20.GL_POINTS, 0, vCount);
索引法 :GLES20.glDrawElements(GLES20.GL_POINTS, iCount, GLES20.GL_UNSIGNED_BYTE,
二.android的openGLES2.0程序设计框架浅析
1.主要实现流程有如下顺序的几点操作:
定义物体顶点信息 –> 编辑着色器代码 –> 编译连接着色器程序 -> 物体顶点信息传入着色器 –> GLSurfaceView加载Renderer –> Activity加载GLSurfaceView -> 渲染物体输出屏幕
操作名称
一般实现方法
定义物体顶点信息
(1)三维坐标信息; (2)三维法向量信息;(3)颜色信息或二维贴图坐标信息;
编辑着色器代码
编译连接着色器
主要方法:(1. InputStream in = rgetAssets .open(fname);
(1.
int shaderId = GLES20.glCreateShader(shaderType);// shaderType
如果申请成功则返回的shaderId不为零
(2.
GLES20.glShaderSource(shaderId, source);/// source是脚本字符串
GLES20.glCompileShader(shaderId);///编译
int compiles[1];
GLES20.glGetShaderiv(shaderId, GLES20._GL_COMPILE_STATUS, compiles, 0);///查看编译情况
if(compiles[0] == 0){//编译失败,释放申请的着色器
}
(1.
(2.
while((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR){
}
(3.
GLES20.glLinkProgram(program);
int LinkStatus[1];
GLES20.glGetPromgramiv(program, GLES20.GL_LINK_STATUS, LinkStatus, 0);
if(LinkStatus[0]!= GLES20.GL_TRUE){
GLES20.glDeletePromgram(program);
program = 0;
}
物体顶点信息传入着色器
获取着色器参数ID
传入数据
使用数据:GLES20.glEnableVertexAttribArra
GLSurfaceView加载Renderer
setEGLContextClientVersi
setRanderer(new MyRenderer());//增添渲染器
setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);//主动渲染模式
}
- OpenGLES2.0原理浅析
- openglES2.0 时代来临?
- opengles2.0中的纹理
- opengles2.0 shader备忘
- OpenGLes2.0 什么是Pbuffer
- ndk opengles2.0 配置
- Opengles2.0入门
- 浅学OpenGLES2.0
- 浅学OpenGLES2.0
- 浅学OpenGLES2.0
- OpenGLES2.0笔记
- OpenGLES2.0 概念
- opengles2.0 headfirst Simple_VertexShader
- Android OpenGLES2.0(一)——了解OpenGLES2.0
- Android OpenGLES2.0(一)——了解OpenGLES2.0
- Android opengles2.0 背景透明
- opengles2.0 programming guide: attribute
- opengles2.0 显示yuv数据
- 第四节 面向计算编程-映射归约函数和推导式
- Material Design 主题和布局
- 【HPUoj】1218
- Scipy一维二维插值
- 项目打包时 Archive 编译成功 但是Organizer无法弹出
- OpenGLES2.0原理浅析
- web--前端之js代码5
- vue.js中关于下拉框的值默认及绑定问题
- dex2oat的原理及慢的原因
- NAT技术基本原理与应用
- Elasticsearch基础教程
- Unity简单的MVC
- sql 取重复数据的第一条记录
- IIS发布网页