3D引擎设计:支持多RenderTarget及多Viewport

3D引擎设计:支持多RenderTarget及多Viewport

如果让你的引擎结构支持多个RenderTarget绘制及多个Viewport?这里是我的简单设计:

同样适用我的文本设计图标准(+为包含,  <为派生)

 

RenderTexture

      RenderTarget

          <ScreenTarget(引擎启动时,初始化屏幕大小的Viewport)

          +RenderView (对于一个RT,可以是屏幕,可以是纹理RT,所以可以拥有 1~n个切分视图 )

               +Camera

               +Viewport

 

以下是多View绘制的类XNA伪代码

 

Engine.Run()
{
    Device.Clear()
 
    // 保存当前全屏Viewport
    ScreenViewport = Device.CurrentViewport
 
    Device.BeginScene()    
 
    // 遍历当前屏幕RT下的所有View
    foreach RenderView in ScreenRT
    {
        // 未激活的View不用绘制
        if RenderView not active then continue
 
        // 将View对应的Viewport提交到设备        
        RenderView.CommitViewport()
 
        // 渲染回调
        foreach RenderEventListener in RenderEventListenerList
        {
            RenderEventListener.OnRenderFrame()
        }
    }
 
    Device.EndScene()
 
     Device.Present()
 
    Device.CurrentViewport = ScreenViewport // 恢复全屏viewport
}

 

 

以下是RT间嵌套绘制的伪代码:

RenderView.SwitchRenderTarget(stage, RenderTarget)
{
    // 保存绘制前的RT
    PreTarget = Device.GetRenderTarget()
    // 设置为当前的RT
    Device.SetRenderTarget( RenderTarget )
 
    // 更新RT摄像机
    RenderTarget.UpdateCamera()    
    
    // 清空RT
    Device.Clear()
 
    // 绘制回调
    RenderTarget.OnRender( )
 
    // 恢复之前的RT
    Device.SetRenderTarget( PreTarget  );
}

你可能感兴趣的:(3D引擎设计:支持多RenderTarget及多Viewport)