cocos2dx下的OpenGL学习总结 docx - 图文(6)

2019-03-03 10:31

float(a);vec4(a_vec2.xy,0.0,1.0);

2.5.3 Vector Component Accessors

vec4(a_vec2.xy,0.0,1.0)?xy是什么?这是为了方便书写,GLSL对vec中的变量提供了访问别名,如下图所示。

图2.16 vector的别名

2.5.4 shader的结构

我们知道,我们常用的shader有两个,一个是顶点着色器,一个是片元着色器。在顶点着色器中,传入的变量用attribute修饰,通常放在程序顶部。需要在顶点着色器与片元着色器间传递的变量,用varying修饰,通常这种变量在顶点着色器中赋值,在片元着色器中读取(读取到的内容是经过插值的)。Uniform型变量同时可以在顶点着色器和片元着色器中被访问,但不能被修改。

每一个shader程序,虽然有着main函数,但实质上却是一个有着输入输出的函数。正如咱前面ColoredTriangle的代码,顶点着色器中position,color是输入,gl_Position,v_color是输出;片元着色器中,v_color是输入,gl_fragColor是输出,通常片元着色器中有且仅有这一个输出。

2.5.5shader中的内置变量与内置函数

细心的同学可能要问,gl_Position, gl_fragColor是什么,好像程序中完全没有定义过啊。其实,这些是GLSL的内置变量,如图2.17,1.18所示。

图2.17顶点着色器的内置变量

图2.18片元着色器的内置变量

这些内置变量的详细解释,请在红宝书第8版的附录C中查询。除了内置变量,还有一些内置函数,内置常数,在这也就不一一列举,有兴趣的同学可以翻阅红宝书进行深入学习。

2.5.6 cocos2dx提供的内置变量

除了上面提到的GLSL内置变量,我们还可以在官方demo中看到一些CC打头的变量,那是Cocos2dx在编译shader时加进去的。

打开引擎cocos/render下的CCGLProgram.h文件,我们可以看到这些静态变量,如图2.19所示。

图2.19 cocos2dx的shader内置变量1

转到CPP文件,我们可以看到如下定义。如图2.20所示。在updateUniforms函数中,把这些变量定义到shader中,新版本的createWithByteArrays

函数中会被自动调用。在每帧调用

setUniformsForBuiltins函数可以更新诸如MV矩阵时间控制等变量。

图2.20 cocos2dx的shader内置变量2

三 3D图元的绘制

通过前面的学习,大家是否已经对cocos2dx下的openGL编程有了初步的了解呢。下面,我们来进入正题,绘制3D图元。

3.1 MVP 3D 矩阵变幻

在学习3D的时候,我们常常会听到MVP的概念。下面我分析下这些矩阵的意义。

我们知道,电脑的屏幕都是二维的,显卡的光栅化,也都是处理的二维图元。那么,我们如何把3D的坐标,变化为屏幕的二维坐标呢。

3.1.1 投影矩阵


cocos2dx下的OpenGL学习总结 docx - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:XX镇旧村改造扩建(新农村建设)工程项目建议书 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: