整理之前Shader例子时,发现Sprite变灰的例子,执行后,图片变了位置,跑到右上角。
发现原因是Gray.vsh中
gl_Position = CC_MVPMatrix * a_position;
CC_MVPMatrix改成CC_PMatrix就可以了。
矩阵的概念还是很模糊的,内部怎么处理暂时还没找到,CC_PMatrix 为原坐标,而CC_MVPMatrix 则会变动坐标
如下是在网上找到的解释资料:
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;
发现原因是Gray.vsh中
gl_Position = CC_MVPMatrix * a_position;
CC_MVPMatrix改成CC_PMatrix就可以了。
矩阵的概念还是很模糊的,内部怎么处理暂时还没找到,CC_PMatrix 为原坐标,而CC_MVPMatrix 则会变动坐标
如下是在网上找到的解释资料:
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;