cocos3d怎么单独截图一个节点转为base64呢

cocos3d怎么单独截图一个节点转为base64呢,节点大小不固定,不等于canvas大小

@panda @boyue

testcamera.zip (1.7 MB)

这是demo,不知道怎么截图只想要的大小

求求大佬指点一下

:grimacing:

这么基础的功能没人用吗

这个问题我之前问过 根本没有人回答

可以在数据处理那里来改变截取的范围呢

我也想要解决这个问题

根据节点位置和大小 修改相机位置大小进行截图,或者全屏截图遍历像素数据截图节点大小那部分。

你说的这两个我尝试过了,但是没实现出来,能具体说说吗

全屏截图拿到RenderTexture,转为Uint8Array是个数组,因为是u8a,即数组每个元素是8位的,而每个颜色argb是32位,所以数组四个元素对应一个颜色像素。比如100 * 100的图,得到的u8a数组大小是100 * (100*4),裁剪像素后,const ia = new ImageAsset(), ia.reset(_data:u8a);就可以再把裁剪后的图显示在SpriteFrame了。

1赞

我想拿裁剪后的base64数据怎么做呢,因为canvas创建都是固定大小,也是最后把base64数据进行裁剪吗

你这个canvas是指场景里的canvas还是document.createElement(‘canvas’)?如果是前者,应该和这里的没关系啊,后者的话canvas都是动态创建的设置为截图大小,再把前面的像素数据填进去,最后调canva.toDataURL转为base64即可。

后者动态创建document.createElement(‘canvas’)不管设置为多大都是设计分辨率,就是这里卡住了

document.createElement(‘canvas’),canvas.width = 100,canvas.height = 100这些设置了都无效

image
image

没遇到你那问题啊

怎么把一个node单独转成base64 node包扩他里面的精灵节点 不是要摄像的一个区域

好的,是之前代码写错了,已搞定,非常感谢大佬!