[LayaAir3]laya3.2.4可以将相机renderTexture渲染到一张texture2d上么?
/**创建一个拍摄一帧 */
CreateCaptureFrame(sp:Laya.Sprite,cameraSet:(camera:Laya.Camera)=>void,cb:(umd:UIModelData)=>void){
const camera = GameMgr.uiModelMgr.CreateCamera()
cameraSet && cameraSet(camera)
GameMgr.timer.frameOnce(2,this,()=>{
const arr = new Uint8Array(camera.renderTarget.width * camera.renderTarget.height * 4)
camera.renderTarget.getDataAsync(0,0,camera.renderTarget.width,camera.renderTarget.height,arr).then((buffer)=>{
console.log(buffer)
const tex2d = new Laya.Texture2D(512,512,Laya.TextureFormat.R8G8B8A8,true,false)
tex2d.setPixelsData(buffer,false,false)
const data:UIModelData = {
camera,
sp,
tex2d:tex2d,
}
camera.active = false
sp.texture = new Laya.Texture(tex2d)
this.createDatas.push(data)
cb && cb(data)
})
})
}我之前让相机拍摄一帧,并不想持续拍摄,这是我尝试实现的代码,但是没有显示
CreateCaptureFrame(sp:Laya.Sprite,cameraSet:(camera:Laya.Camera)=>void,cb:(umd:UIModelData)=>void){
const camera = GameMgr.uiModelMgr.CreateCamera()
cameraSet && cameraSet(camera)
GameMgr.timer.frameOnce(2,this,()=>{
const arr = new Uint8Array(camera.renderTarget.width * camera.renderTarget.height * 4)
camera.renderTarget.getDataAsync(0,0,camera.renderTarget.width,camera.renderTarget.height,arr).then((buffer)=>{
console.log(buffer)
const tex2d = new Laya.Texture2D(512,512,Laya.TextureFormat.R8G8B8A8,true,false)
tex2d.setPixelsData(buffer,false,false)
const data:UIModelData = {
camera,
sp,
tex2d:tex2d,
}
camera.active = false
sp.texture = new Laya.Texture(tex2d)
this.createDatas.push(data)
cb && cb(data)
})
})
}我之前让相机拍摄一帧,并不想持续拍摄,这是我尝试实现的代码,但是没有显示
没有找到相关结果
已邀请:
3 个回复
LayaAir大为
赞同来自:
LayaAir大为
赞同来自:
@regClass()
export class Script extends Laya.Script {
//declare owner : Laya.Sprite3D;
declare owner : Laya.Sprite;
public texture: Laya.Texture;
//场景中要添加一个按钮
@property(Laya.Button)
public button: Laya.Button;
public texture2D: Laya.Texture2D;
private uint8Array: Uint8Array;
// 组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
onAwake(): void {
this.texture2D = new Laya.Texture2D(256, 256, Laya.TextureFormat.R8G8B8A8, false, true);
this.button.on(Laya.Event.CLICK, this, this.onButtonClick);
//加载渲染纹理,加载成功后得到的是一个Laya.Texture对象
Laya.loader.load("resources/RenderTexture.rendertexture").then((res) => {
this.texture = res;
})
}
onButtonClick() {
this.uint8Array = this.texture.getTexturePixels(0, 0, 256, 256);
this.texture2D.setPixelsData(this.uint8Array, false, false);
this.owner.texture = new Laya.Texture(this.texture2D);
}
}
年年有肝
赞同来自:
/**创建一个拍摄 */
CreateCapture(sp:Laya.Sprite){
const camera = GameMgr.uiModelMgr.CreateCamera()
sp.texture = new Laya.Texture(camera.renderTarget)
const data:UIModelData = {
camera,
sp,
}
this.createDatas.push(data)
return data
}
/**创建一个拍摄一帧 */
CreateCaptureFrame(sp:Laya.Sprite,cameraSet:(camera:Laya.Camera)=>void,cb?:()=>void){
if(sp.texture && !sp.texture.destroyed){
sp.texture.destroy()
}
const umd = this.CreateCapture(sp)
cameraSet && cameraSet(umd.camera)
GameMgr.timer.frameOnce(1,this,()=>{
const htmlCanvas = sp.drawToCanvas(sp.width,sp.height,0,0)
this.Recycle(umd)
sp.texture = htmlCanvas.getTexture() as Laya.Texture
cb && cb()
})
}但是捕获到的图片发白,不知道怎么回事