图片渲染延迟_Qt入门DirectX11学习之旅(六)DirectX11 GBuffer Deffered延迟渲染

577a34f000c4156e958164da54fab131.png

哈哈,这周搞QT的这个错误修了一个礼拜,总算修完了,慢慢造轮子吧。大概延迟渲染效果如下,

1a095df6cc07b5c75086196d39ee944d.png
https://www.zhihu.com/video/1210542184405352448

延迟渲染之前好好规划了下代码,不然容易乱。

目前采用了组件的方法,大概关系如下

XWorld包含了所有的子关卡XLevel ,XLevel又包含了所有物体Xctor,Xctor上挂各种功能组件XCom和只有编辑器使用的组件XEom

渲染时候依次往下遍历,调用类中的RenderUpdate方法渲染。

d775420874ba80e5a626f0f40eef3613.png

新建了XComPostVolume用来使用GBuffer进行后处理的,这个后期场组件很简单,就是处理一个NDC坐标系的四边形面片mesh渲染,将GBuffer通过这个着色器渲染出最终图像。

381da307811f24971455abf012a55f75.png

详细的Directx11的GBuffer搭建步骤我是看的下面的案例,很不错。

Deferred Shading​www.rastertek.com
fc6e28ac58bde4b03cc84f21d0fdb54b.png

透视投影矩阵推导的讲解转载个:

人宅:透视矩阵推导​zhuanlan.zhihu.com
628375479561db0166f3b71a4bb66d59.png

DX11中使用图片需要用这两个函数绑定下

fed20fe121d985220572828c108404cd.png

Sampler是采样器绑定输入,ShaderResourceView是绑定图片的

具体的GBuffer我简单采用了一个枚举和Buffer数量来整体控制

655487938717dec2f3629c89a6b20f46.png

然后先在RenderInit初始化后期场

RenderUpdate里面渲染XWorld类型的 allworld变量里的所有物体 进入GBuffer,然后传入postvolume里面进行后面的延迟渲染。大概如下

468135bf43c59f6e4cca9b24591cfa8e.png

下面这种多窗口实现预览GBuffer的效果我是采用如下方法:

f6a7b8c62a5dda3d874ae6f8b33f6b8b.png

1.先渲染物体进入GBuffer。

2.渲染n个四边形面片。

3.将对应的ShaderSoure当作图片传入面片,进行排布显示

具体代码如下

b0050fe8420db7d52acd9b54da79846b.png

scale是面片的大小,offset计算的是面片缩放过后需要的偏移量,这个偏移量是从屏幕中心偏移到屏幕左下(-1,-1),的偏移值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值