上面三篇基本把这个扩大纹理显示区域的问题解决了,但是又发现一个问题。
这个问题是这个算法目前只支持单张图片,对于图集这个目前是有问题的,这就是之前要把min_textoord和max_textoord传进shader的原因。
因为对于图集来说那个CC_Texture0是那个大图,所以对于单个SpriteFrame,他处理的所有的纹理坐标就不是(0,0)到(1,1)了,比如下面:
整张图集是最外边的框,里面有A和B两个单张图片,A的纹理坐标是(0.15,0.15)到(0.5,0.5),B的纹理坐标是(0.75,0.15)到(0.9,0.5)
对于A来说,他处理的纹理坐标就不是(0-1),所以需要把他的最小纹理坐标和最大纹理坐标传入到shader中。
还有一个问题是如果单张纹理图片周边带有空白像素,同时图集设置自动裁切掉周边的空白,那么就会有偏移的问题,目前还没解决这个问题,后面持续更新,有大牛知道解决方案,评论我,验证正确会修改。
至此完成,后面的外发光那些算法,本文不涉及,完结撒花。
关于上面的问题发现之前写的顶点shader有BUG,因为CPU传进顶点shader的坐标已经做过MV矩阵运算了,这时候再在世界坐标系下平移和缩放是有问题的。
解决方案有两个,一个是直接在C+