• 初识CC_MVPMatrix


    初识CC_MVPMatrix

    CC_MVPMatrix是一个mat4类型的uniform,在shader代码被编译之前,它由cocos2d-x框架插入进来的。

    bool GLProgram::compileShader(GLuint * shader, GLenum type, const GLchar* source)
    {
        //部分代码省略
        const GLchar *sources[] = {
    #if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32 && CC_TARGET_PLATFORM != CC_PLATFORM_LINUX && CC_TARGET_PLATFORM != CC_PLATFORM_MAC)
      (type == GL_VERTEX_SHADER ? "precision highp float;
    " : "precision mediump float;
    "),
    #endif
      "uniform mat4 CC_PMatrix;
    "
      "uniform mat4 CC_MVMatrix;
    "
      "uniform mat4 CC_MVPMatrix;
    "
      "uniform vec4 CC_Time;
    "
      "uniform vec4 CC_SinTime;
    "
      "uniform vec4 CC_CosTime;
    "
      "uniform vec4 CC_Random01;
    "
      "uniform sampler2D CC_Texture0;
    "
      "uniform sampler2D CC_Texture1;
    "
      "uniform sampler2D CC_Texture2;
    "
      "uniform sampler2D CC_Texture3;
    "
      "//CC INCLUDES END
    
    ",
      source,
        };
    
        *shader = glCreateShader(type);
        glShaderSource(*shader, sizeof(sources)/sizeof(*sources), sources, nullptr);
        glCompileShader(*shader);
        //下面的代码省略了...
    }

    从上面的代码,我们可以看到, 这里除了插入CC_MVPMatrix以外,还插入了其它一些uniform。只要你在后面的main函数里面不使用这些变量,最终shader program里面是看不到它们的。(被优化掉了)

    CC_MVPMatrix的作用

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

    • 对象空间(Object Space)
    • 世界空间(World Space)
    • 照相机空间(Camera Space)
    • 裁剪空间(Clipping Space)
    • 视口空间(Viewport)

    从对象空间到世界空间的变换通常叫做Model-To-World变换,从世界空间到照相机空间的变换叫做World-To-View变换,而从照相机空间到裁剪空间的变换叫做View-To-Projection。合起来,就是我们常常提到的MVP变换。这里面每一个变换都是乘以一个矩阵,3个矩阵相乘最后还是一个矩阵,也就是cocos2d-x里面的CC_MVPMatrix啦。当然,实际开发过程中,我们往往会把MV变换放到一起,一般做法如下:

    gl_Position = P * MV * ObjectPosition;
  • 相关阅读:
    php实现读取超大文本并进行分页
    php高并发处理
    php7.3新特性
    php文件用什么软件编写
    destoon7.08.0极简自适应大气模板
    destoon调用它的分类及子分类和三级分类名的方法
    CentOS7安装Git服务器
    python logging模块 在多个模块中记录日志
    CentOS7下安装mysql5.7
    python环境变量 PYTHONPATH
  • 原文地址:https://www.cnblogs.com/quansir/p/5528937.html
Copyright © 2020-2023  润新知