![577a34f000c4156e958164da54fab131.png](https://img-blog.csdnimg.cn/img_convert/577a34f000c4156e958164da54fab131.png)
哈哈,这周搞QT的这个错误修了一个礼拜,总算修完了,慢慢造轮子吧。大概延迟渲染效果如下,
![1a095df6cc07b5c75086196d39ee944d.png](https://img-blog.csdnimg.cn/img_convert/1a095df6cc07b5c75086196d39ee944d.png)
延迟渲染之前好好规划了下代码,不然容易乱。
目前采用了组件的方法,大概关系如下
XWorld包含了所有的子关卡XLevel ,XLevel又包含了所有物体Xctor,Xctor上挂各种功能组件XCom和只有编辑器使用的组件XEom
渲染时候依次往下遍历,调用类中的RenderUpdate方法渲染。
![d775420874ba80e5a626f0f40eef3613.png](https://img-blog.csdnimg.cn/img_convert/d775420874ba80e5a626f0f40eef3613.png)
新建了XComPostVolume用来使用GBuffer进行后处理的,这个后期场组件很简单,就是处理一个NDC坐标系的四边形面片mesh渲染,将GBuffer通过这个着色器渲染出最终图像。
![381da307811f24971455abf012a55f75.png](https://img-blog.csdnimg.cn/img_convert/381da307811f24971455abf012a55f75.png)
详细的Directx11的GBuffer搭建步骤我是看的下面的案例,很不错。
Deferred Shadingwww.rastertek.com![fc6e28ac58bde4b03cc84f21d0fdb54b.png](https://img-blog.csdnimg.cn/img_convert/fc6e28ac58bde4b03cc84f21d0fdb54b.png)
透视投影矩阵推导的讲解转载个:
人宅:透视矩阵推导zhuanlan.zhihu.com![628375479561db0166f3b71a4bb66d59.png](https://img-blog.csdnimg.cn/img_convert/628375479561db0166f3b71a4bb66d59.png)
DX11中使用图片需要用这两个函数绑定下
![fed20fe121d985220572828c108404cd.png](https://img-blog.csdnimg.cn/img_convert/fed20fe121d985220572828c108404cd.png)
Sampler是采样器绑定输入,ShaderResourceView是绑定图片的
具体的GBuffer我简单采用了一个枚举和Buffer数量来整体控制
![655487938717dec2f3629c89a6b20f46.png](https://img-blog.csdnimg.cn/img_convert/655487938717dec2f3629c89a6b20f46.png)
然后先在RenderInit初始化后期场
RenderUpdate里面渲染XWorld类型的 allworld变量里的所有物体 进入GBuffer,然后传入postvolume里面进行后面的延迟渲染。大概如下
![468135bf43c59f6e4cca9b24591cfa8e.png](https://img-blog.csdnimg.cn/img_convert/468135bf43c59f6e4cca9b24591cfa8e.png)
下面这种多窗口实现预览GBuffer的效果我是采用如下方法:
![f6a7b8c62a5dda3d874ae6f8b33f6b8b.png](https://img-blog.csdnimg.cn/img_convert/f6a7b8c62a5dda3d874ae6f8b33f6b8b.png)
1.先渲染物体进入GBuffer。
2.渲染n个四边形面片。
3.将对应的ShaderSoure当作图片传入面片,进行排布显示
具体代码如下
![b0050fe8420db7d52acd9b54da79846b.png](https://img-blog.csdnimg.cn/img_convert/b0050fe8420db7d52acd9b54da79846b.png)
scale是面片的大小,offset计算的是面片缩放过后需要的偏移量,这个偏移量是从屏幕中心偏移到屏幕左下(-1,-1),的偏移值。