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的每一个虚函数重载一次让你知道他的框架怎么运行的。还是比较有意思的。下面要进行高级教程了。不过最近遇到一件心烦的事情,今天都是强写的。不知道以后还有没有机会继续写。希望吧。。