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的每一個虛函數重載一次讓你知道他的框架怎麼運行的。還是比較有意思的。下面要進行高級教程了。不過最近遇到一件心煩的事情,今天都是強寫的。不知道以後還有沒有機會繼續寫。希望吧。。