GB學習【9】--渲染流程

GB第9個例子也是最後一個基本例子。

講了GB的frame render system 和renderTexture

通過重載createframe來加入自己需要的渲染。

m_spScene->GetObjectByName("DisplayScreen")可以得到屏幕當親的backbuffer.

然後通過得到對應的屬性NiTexturingProperty* pkTexturing = (NiTexturingProperty*)
        m_spDisplayScreen->GetProperty(NiProperty::TEXTURING)

來替換當前渲染的對象。

渲染對象可以通過NiRenderedTexture::Create這個靜態函數創建。然後按照前一章說過的SetbaseTexture()設置我們的渲染對象。應用模式設置爲替換就可以了。

創建一個Ni3DRenderView 用來渲染我們想要看到的東西。

pkRenderedTextureRenderView->SetName(m_kRenderedTextureRenderViewName);
    pkRenderedTextureRenderView->AppendScene(m_spScene);

    // Create the rendered texture NiRenderClick.
    NiViewRenderClick* pkRenderedTextureRenderClick = NiNew NiViewRenderClick;
    pkRenderedTextureRenderClick->SetName(m_kRenderedTextureRenderClickName);
    pkRenderedTextureRenderClick->AppendRenderView(
    pkRenderedTextureRenderView);
    pkRenderedTextureRenderClick->SetRenderTargetGroup(m_spRenderTargetGroup);
    pkRenderedTextureRenderClick->SetClearAllBuffers(true);
    pkRenderedTextureRenderClick->SetPreProcessingCallbackFunc(
    RenderedTextureRenderClickPre, this);
    pkRenderedTextureRenderClick->SetPostProcessingCallbackFunc(
    RenderedTextureRenderClickPost, this);

    NiDefaultClickRenderStep* pkMainStep = NiDynamicCast(
    NiDefaultClickRenderStep, m_spFrame->GetRenderStepByName(
    m_kMainRenderStepName));
    NIASSERT(pkMainStep);
    pkMainStep->PrependRenderClick(pkRenderedTextureRenderClick);

可以看出GB的RenderStep有點類似於一個tech可以包含多click(pass)

可以設置一個一個step的回調來出行一些前期後期的處理。很方便。

看起來很玄妙其實也就是fx那套。把渲染分成一組一組的。

最後一個教程弄完發現他的遠程原來就是圍繞 Niapplication的每一個虛函數重載一次讓你知道他的框架怎麼運行的。還是比較有意思的。下面要進行高級教程了。不過最近遇到一件心煩的事情,今天都是強寫的。不知道以後還有沒有機會繼續寫。希望吧。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章