d3d12龙书学习之MiniEngine的最小化实现(四) 光照shader的实现

本文介绍了如何在D3D12的MiniEngine中实现光照效果,通过理解d3d12book的光照shader并进行相应修改。主要内容包括:调整坐标转换,将d3d12book的光照shader应用于MiniEngine,以及解决最终结果显示比原版更亮的问题。涉及关键操作如矩阵转置、常量缓冲区调整和shader参数修改。
摘要由CSDN通过智能技术生成

前言

光照的实现,主要是shader做的,C++代码层没添加多少东西。
理解了shader,看懂d3d12book的源码,shader直接拷进来,C++代码直接转过来就可以了。
难度主要是看懂shader。对于光照的计算,应该说我也没有深入学,仅仅是了解了一些概念,就像是很多数学公式我也不会推一样。正确理解自己的能力,做好能力范围内的事情,对于数学的提高,觉得可以稍微靠后放一放。主要还是学习d3d12的一些使用上的东西。

修改MiniEngine的坐标转换

在前边的学习过程中,就挺纠结的。因为在VS shader中mul函数的俩参数是反过来的。最初以为是MiniEngine做了什么奇怪的操作,后来发现不是。
这篇博客讲得很清楚,可以学习下。
https://www.cnblogs.com/X-Jun/p/9808727.html

我觉得 mul(点,矩阵) 更符合直觉,也更符合公式。
所以第八章第一步就是要在C++部分对传入的矩阵先做一次转置。
为了更好的贴合d3d12book的shader,也同样的把常量缓冲区改成3部分,只是槽有点区别。

先实现shapes这个例子,只需要两个常量缓冲区,一个放入模型转世界的矩阵,一个放入摄像机的世界转投影矩阵。
简易的修改如下:

  1. 修改根签名:
	m_RootSignature.Reset(3, 0);
    m_RootSignature[0].InitAsConstantBuffer(0, D3D12_SHADER_VISIBILITY_VERTEX);
    m_RootSignature[1].InitAsConstantBuffer(1, D3D12_SHADER_VISIBILITY_ALL);
  1. 动态传入投影矩阵的转置矩阵
	__declspec(align(16)) struct
    {
        Matrix4 viewProj;  // 从世界坐标
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值