# 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

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

2016-06-10 12:35:39

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

2014-08-27 22:21:23

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

2014-08-21 14:13:00

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

2016-01-20 01:09:44

#### OpenGLES: gl_Position设置

2015-12-02 15:43:42

#### 详解MVP矩阵之ViewMatrix

2016-03-28 21:15:23

#### 关于Opengl各种矩阵变换(MVPW)的自我理解

2015-01-06 12:27:02

#### opengl es 2.0 3.0 MVP矩阵计算

2016-04-16 18:53:36

#### Android OpenGL ES 2.0 屏幕坐标和3D世界坐标转换

2016-04-11 16:26:16

#### Cocos2dx-OpenGL ES 2.0教程：你的第一个三角形(1)

2015-11-17 21:13:27