Skip to content

RoyRenderTarget

离屏表面,我们往往认为离屏表面也是一种资源类型。它的作用是将某一个场景渲染到一张纹理上,然后再将这张纹理参与到场景的绘制过程中去。举一个例子,智能家居的3D场景中有一个摄像头,拍摄了3D场景中的物体,然后再把这个摄像头拍摄的图片,显示到相同3D场景的电视机上。

要执行这个过程,我们必须执行以下两步:

  • 在摄像头的位置摆放一个相机,渲染场景,但是不是渲染到屏幕,而是渲染到一个离屏表面,把这个图片数据保存下来
  • 在主场景的绘制中,当绘制到电视机的模型时,把刚才保存的图片数据,作为纹理赋值给电视机屏幕模型的材质上。

RoyRenderTarget的定义

typescript
export class Attachment {
    attachmentPoint: RenderTarget$AttachmentPoint = RenderTarget$AttachmentPoint.COLOR;
    texture: RoyTexture;
    mipLevel: number = 0;
    face: Texture$CubemapFace = Texture$CubemapFace.POSITIVE_X;
    layer: number = 0;
}

export class RoyRenderTarget {
    protected m_sampleCount: number = 1;
    set sampleCount(value: number) {
        this.m_sampleCount = value;
    }
    get sampleCount(): number {
        return this.m_sampleCount;
    }

    protected m_attachments: Array<Attachment> = new Array<Attachment>();
    get attachments(): Array<Attachment> {
        return this.m_attachments;
    }
}

离屏表面渲染的方式,其实区别于把场景渲染到UI上的方式,在实际项目中往往容易混淆。场景渲染到UI其实是把场景渲染到屏幕,然后通过canvas.drawImage的方式copy到另外一个canvas,再把这个canvas放到react或Vue等UI框架上显示。一个是渲染到离屏表面,一个是直接渲染到表面,完全不同的渲染流程。