# Cocos2dx-OpenGL ES2.0教程:初识MVP(3)

## 初识Uniform

 1 2 3 4 5 6  varying vec4 v_fragmentColor; uniform vec4 u_color; void main() { gl_FragColor = v_fragmentColor * u_color; } 

 1  GLuint uColorLocation = glGetUniformLocation(glProgram->getProgram(), "u_color"); 

 1 2  float uColor[] = {1.0, 0.0, 0.0, 1.0}; glUniform4fv(uColorLocation,1, uColor); 

triangle

## 初识CC_MVPMatrix

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  bool GLProgram::compileShader(GLuint * shader, GLenum type, const GLchar* source) { //部分代码省略 const GLchar *sources[] = { "uniform mat4 CC_PMatrix;\n" "uniform mat4 CC_MVMatrix;\n" "uniform mat4 CC_MVPMatrix;\n" "uniform vec4 CC_Time;\n" "uniform vec4 CC_SinTime;\n" "uniform vec4 CC_CosTime;\n" "uniform vec4 CC_Random01;\n" "uniform sampler2D CC_Texture0;\n" "uniform sampler2D CC_Texture1;\n" "uniform sampler2D CC_Texture2;\n" "uniform sampler2D CC_Texture3;\n" "//CC INCLUDES END\n\n", source, }; *shader = glCreateShader(type); glShaderSource( *shader, sizeof(sources)/sizeof( *sources), sources, nullptr); glCompileShader( *shader); //下面的代码省略了... } 

### CC_MVPMatrix的作用

CC_MVPMatrix本质上是一个变换矩阵，用来把一个世界坐标系中的点转换到Clipping space。当然，如果学过OpenGL的人都知道，3D物体从建模到最终显示到屏幕上面要经历以下几个阶段：

• 对象空间(Object Space)
• 世界空间(World Space)
• 照相机空间(Camera Space/Eye Space)
• 裁剪空间(Clipping Space)
• 设备空间（normalized device space）
• 视口空间(Viewport)

 1  gl_Position = P * MV * ObjectPosition; 

### 修改CC_MVPMatrix

 1 2 3 4  Director::getInstance()->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); Director::getInstance()->loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); Director::getInstance()->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION); Director::getInstance()->loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION); 

 1 2  Director::getInstance()->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION); Director::getInstance()->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 

 1  glProgram->setUniformsForBuiltins(); 

## 设备空间(normalized device space)

 1 2 3  float vertercies[] = { -1,-1, //第一个点的坐标 1, -1, //第二个点的坐标 0, 1}; //第三个点的坐标 

clippingspace

• 本文已收录于以下专栏：

## OpenGL ES2.0教程（3）：初识MVP

http://cn.cocos2d-x.org/tutorial/show?id=1349 OpenGL ES2.0教程（3）：初识MVP 子龙山人2014-08-19 10:04:28861...
• wanglang3081
• 2014年08月27日 22:21
• 1315

## OpenGLES: gl_Position设置

• marunshengabc
• 2015年12月02日 15:43
• 3536

• quantao0308
• 2016年12月19日 13:27
• 231

## 【cocos2d-x 2.x 学习与应用总结】11: 理解CCGLProgram

• elloop
• 2016年01月20日 01:09
• 1552

## cocos2D-X源码分析之从cocos2D-X学习OpenGL（10）----MVP矩阵

• bill_man
• 2016年06月10日 12:35
• 8385

## Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程

• cbbbc
• 2014年09月21日 22:36
• 12358

## cocos2D-X源码分析之从cocos2D-X学习OpenGL（4）---混合

• bill_man
• 2015年12月30日 20:12
• 4016

## cocos2dx opengl入门系列二-画一个三角形

• u013654125
• 2017年06月22日 14:02
• 219

## Cocos2dx下 基本的OpenGL ES 绘图

void GLFirstLayer::draw() { // CCLayer::draw(); //顶点数据 static GLfloat vertex[] ...
• ym19860303
• 2013年07月01日 00:36
• 7354

## 详解MVP矩阵之ViewMatrix

ViewMatrix用于直接将World坐标系下的坐标转换到Camera坐标系下。已知相机的坐标系，还有相机在世界空间下的坐标.就可以求出ViewMatrix，下面进行具体推导。令UVN为相机坐标系下...
• qp120291570
• 2016年03月28日 21:15
• 9474

举报原因： 您举报文章：Cocos2dx-OpenGL ES2.0教程:初识MVP(3) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)