码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发-OpenGLES 入门踩坑

时间:2016-03-24 16:18:34      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:

Flat coloring(单色)

是通知OpenGL使用单一的颜色来渲染,OpenGL将一直使用指定的颜色来渲染直到你指定其它的颜色。

指定颜色的方法为

public abstract void glColor4f(float red, float green, float blue, float alpha)。

缺省的red,green,blue为1,代表白色。

Smooth coloring (平滑颜色过渡)

当给每个顶点定义一个颜色时,OpenGL自动为不同顶点颜色之间生成中间过渡颜色(渐变色)。
 
 

gl_FragCoord(点我)

gl_FragCoord根据glsl language spec的解释为:
它是fragment shaders的输入变量,并持有该framgent的屏幕相对坐标(x, y, z, 1/w)
 
 

CAEAGLLayer 

显示比例不对,屏幕大小只有320*480.
contentsScale属性定义了寄宿图的像素尺寸和视图大小的比例
 
 

GLSL限定符

限定符赋给变量特殊的含义:
const--     用于声明非可写的编译时常量变量
attribute-- 用于经常更改的信息,只可以在顶点着色器中使用
uniform--  用于不经常更改的信息,用于顶点着色器和片元着色器
varying--   用于从顶点着色器传递到片元着色器的插值信息
 
 

GLSL内建变量

Vertex Shader的输出数据时使用的内置变量:
vec4 gl_posotion;                用来设置顶点转换到屏幕坐标的位置,Vertex Shader一定要去更新这个数值
float gl_pointSize;                是启动PointSprite功能时,用来设置矩形大小的数值
vec4 gl_ClipVertex;              如果启用了Clip Plane功能,gl_ClipVertex可以放入用来与Clip Plane平面做测试用的位置
 
Fragment Shader的内置输出变量:
vec4 gl_FragColor;                               代表画面所要填入的颜色
vec4 gl_FragData[gl_MaxDrawBuffers];  用来填入画面的颜色,用在启用多个FrameBuffer时,调用gl_FragData填入画面颜色
vec4 gl_FrData填入画面颜色
vec4 gl_FragDepth;                             用来指定Z Buffer测试时所使用的Z值,这样就可以不通过顶点内插得到的Z值
 
 
GLSL
GLSL是严格的类型匹配,int和float不会默认互转;
着色语言定了三种级别的精度:lowp, mediump, highp。我们可以在 glsl 脚本文件的开头定义默认的精度。

precision mediump float;

注意,在片着色器,不会有默认的精度,所以如果没有上面这一句,会有编译错误哦;

 

 

OpenGL

写 OpenGL 代码时从前到后的顺序依次是:设定 viewport(视口变换),设定投影变换,设定视图变换,设定模型变换,在本地坐标空间描绘物体。而在前面为了便于理解做介绍时,说的顺序是OpenGL 中物体最初是在本地坐标空间中,然后转换到世界坐标空间,再到 camera 视图空间,再到投影空间。由于模型变换包括了本地空间变换到世界坐标空间,所以我们理解3D 变换是一个顺序,而真正写代码时则是以相反的顺序进行的,如果从左乘矩阵这点上去理解就很容易明白为什么会是反序的。
 
用数组表示 Matrix 又分为两种形式:行主序和列主序,它们在本质上是等价的,只不过是一个是右乘(行主序,矩阵放右边)和一个是左乘(列主序,矩阵放左边)。OpenGL 使用列主序矩阵,即列矩阵因此我们总是倒过来算的(左乘矩阵,变换效果是按从右向左的顺序进行): 投影矩阵 × 视图矩阵 × 模型矩阵 × 3D位置。
 
 
glUniform2fv 参数的count 是glsl里面vec2 vecArr[3]的vecArr数组个数,不是vec2的数组个数。
 

常犯错误

1,glUniform4fv和glUniform4f的区别?

带v表示是vec,赋值的是基础是向量;

 

2,glUniform 无效?

先调用glUseProgram(myprogram),再调用glUniform;

对于没有调用过的变量,glGetUniformLocation返回值-1;(编译器优化)

 

 

学习的博客

 

iOS开发-OpenGLES 入门踩坑

标签:

原文地址:http://www.cnblogs.com/loying/p/5315733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!