captureNode CCScrollView中裁切区域位置都会有偏移

使用ccUtilis中的captureNode 对node进行截图,发现CCScrollView中裁切区域位置都会有偏移,而且跟scrollView这个节点所在的位置有关。
使用引擎v3.16
这里放三组图片,分别对应scrollView所在的不同位置进行截图测试,很明显scrollView的裁切区域都出现了偏移,其他节点都正常

位置1:scrollView放在屏幕中心

实际界面效果:

截图效果:(裁切区域往上偏移很多,还有小部分子节点在裁切区里面)

位置2:scrollView放在屏幕下面

实际界面效果:

截图效果:(裁切区域往上偏移一点,还有大部分子节点在裁切区里面)

位置3:scrollView放在屏幕上面

实际界面效果:

截图效果:(这个裁切区域偏移很多,已经偏移出底板了,所以子节点在裁切去之外)

没改底层,应该是bug
有没有同学遇到过,知道怎么修改吗?

锚点问题?

你查一下截图时render的变换矩阵有没有问题

应该跟锚点无关,scrollView改什么锚点都一样的,而且其他节点都没有问题,只有scrollView中的遮罩是错的,子节点也是对的。

查过截图时的mv矩阵了吗?截node就是渲染一次改节点,位置异常先看变换矩阵是什么情况

麻烦在helloworld的基础上做下CCScrollView的截图测试,排查下项目本身的问题,如果问题还在,可以demo上传一下,我们排查看看。

改了3.16中的HelloWorldScene,一样的情况
路径:cocos2d-x-3.16/tests/cpp-empty-test/Classes/HelloWorldScene
HelloWorldScene.zip (2.8 KB)
实际效果:


截图效果:

貌似是RenderTexture::begin(),拿到的投影矩阵有问题

设计分辨率和预设分辨率有差别,Director的_contentScaleFactor不为1,导致rendertexture和屏幕大小不同,scrollView剪裁测试的时候会用glScissor设置渲染区域,会发生偏移。
不清楚这个属不属于bug。

我本地测试_contentScaleFactor=1,裁切区也是错的

那你查一下截图用的rt大小呗,注意是像素分辨率不是窗口大小

虽然我测试截图的node是全屏,就是分辨率的大小,不过这个应该不影响,影响这个方法就是没用的,实际测试任意node大小也是正常,没有scrollView的话,截图node的大小是任意的,rt肯定是node的contentSize大小

有空麻烦排查下~

已经处理了,合并下这个修改即可。
https://github.com/cocos2d/cocos2d-x/pull/20549

多谢!!!

刚才合并了修改,发现还是一样的问题。。。

我大概看来下commit,目的就是为了修正rt和屏幕大小不一致glScissor给的起点偏移问题,你可以试试用rt Rect的size和ScrollView的size作商,glScissor起点乘以这个比例

不会吧,就是用你提供的测试代码,测试是正常的,你可以调试跟踪,看下这个值是否有被修正了,如果没有,应该是其他问题了。

1赞