D3D12渲染技术之创建和启用纹理

本文介绍了在D3D12渲染技术中如何加载和使用DDS纹理文件。通过修改DirectXTK的DDSTextureLoader,创建SRV描述符堆,并将纹理绑定到管道,从而在像素着色器中实现纹理效果,增加场景的细节和真实感。此外,还讨论了纹理图集在提高渲染性能方面的作用。
摘要由CSDN通过智能技术生成

纹理在任何引擎都有使用,它其实就是为模型提供的纹理材质,既然我们介绍的是D3D12,那就从dds文件介绍说起。

加载DDS文件

Microsoft提供了轻量级源代码来加载DDS文件:
https://github.com/Microsoft/DirectXTK/wiki/DDSTextureLoader

但是,代码仅支持DirectX 11,我们修改了DDSTextureLoader.h / .cpp文件并为DirectX 12提供了另一种方法(这些修改过的文件可以在Common文件夹中找到或者 可下载的来源):

HRESULT DirectX::CreateDDSTextureFromFile12(
  _In_ ID3D12Device* device,
  _In_ ID3D12GraphicsCommandList* cmdList,
  _In_z_ const wchar_t* szFileName,
  _Out_ Microsoft::WRL::ComPtr<ID3D12Resource>& texture,
  _Out_ Microsoft::WRL::ComPtr<ID3D12Resource>& textureUploadHeap);

要从名为WoodCreate01.dds的图像创建纹理,我们将编写以下内容:

struct Texture
{
  // Unique material name for lookup.
  std::string Name;
 
  std::wstring Filename;
 
  Microsoft::WRL::ComPtr<ID3D12Resource> Resource = nullptr;
  Microsoft::WRL::ComPtr<ID3D12Resource> UploadHeap = nullptr;
};
 
auto woodCrateTex = std::make_unique<Texture>();
woodCrateTex->Name = "woodCrateTex";
woodCrateTex->Filename = L"Textures/WoodCrate01.dds";
ThrowIfFailed(DirectX::CreateDDSTextureFromFile12(
  md3dDevice.Get(), mCommandList.Get(), 
  woodCrateTex->Filename.c_str(),
  woodCrateTex->Resource, woodCrateTex->UploadHeap));

SRV 堆

一旦创建了纹理资源,我们需要为它创建一个SRV描述符,我们可以将其设

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值