战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

如果让你的引擎结构支持多个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  );
}
posted on 2010-03-29 18:16 战魂小筑 阅读(2072) 评论(0)  编辑 收藏 引用 所属分类: 渲染 Shader 引擎

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理