[C++]DirectX 12 3D游戏开发实战—第9章 学习笔记01 2019.5.2

仅为个人学习用,请勿转载

词汇

纹理贴图:texture mapping 渲染到纹理:render-to-texture 纹素:texel 纹理图集:texture atlas
立方体图:cube map 体纹理:volume texture 块压缩:block compression

第9章 纹理贴图

  • 纹理贴图是一种将图像数据映射到网格三角形上的技术,能让物体展示更加丰富的细节

学习目标

  • 学习如何将局部纹理映射到网格三角形上
  • 探究如何创建和启用纹理
  • 学会如何通过纹理过滤来创建更为平滑的图像
  • 探索如何用寻址模式来进行多次贴图
  • 探索如何将多个纹理进行组合,从而创建出新的纹理与特效
  • 学习如何通过纹理动画来创建一些基本效果

9.1纹理与资源的回顾

  • 纹理通过ID3D12Resource接口表示,并以D3D12_RESOURCE_DESC::Dimension成员中的D3D12_RESOURCE_DIMENSION_TEXTURE2D类型来描述二弟纹理对象
  • 2D纹理是一种由特定数组元素构成的矩阵
  • 2D图像:纹理中的每个元素都存储着对应像素的颜色。
  • 法线贴图:每个纹理元素都存储一个3D向量而非颜色数据
  • 1D纹理与3D纹理就像由数组元素构成的1D3D数组,而1D2D3D都用泛型接口ID3D12Resource表示
  • 纹理不同于缓冲区资源,缓冲区资源只存储数据数组,而纹理可以具有多个mipmap层级,GPU会根据这个层级进行相应的操作,例如运用过滤器以及多重采样。支持这些特性的纹理资源会有一些特定的数据格式,而缓冲区资源就没有这项限制,它们可以存储任意类型的数据。
  • 纹理数据格式示例:
    1.DXGI_FORMAT_R32G32B32_FLOAT:每个元素由3个32位浮点数分量构成
    2.DXGI_FORMAT_R16G16B16A16_UNORM:每个元素由4个16位分量构成,每个分量将映射到[0,1]区间内。
    3.DXGI_FORMAT_R32G32_UINT:每个元素由2个32位无符号整数分量构成
    4.DXGI_FORMAT_R8G8B8A8_UROM:每个元素由4个8位无符号分量构成,每个分量将映射到[0,1]之间
    5.DXGI_FORMAT_R8G8B8A8_SROM:每个元素由4个8位有符号分量构成,每个分量将映射到[-1,1]之间
    6.DXGI_FORMAT_R8G8B8A8_SINT:每个元素由4个8位有符号整数分量构成,每个分量被映射到[-128,127]之间
    7.DXGI_FORMAT_R8G8B8A8_UINT:每个元素由4个8位无符号整数分量构成,每个分量将被映射到[0,255]之间
    RGBA分别代表红色绿色蓝色和alpha值
    DXGI_FORMAT_R32G32B32_FLOAT:具有3个浮点分量,可以储存一个3D向量的浮点坐标
    DXGI_FORMAT_R8G8B8A8_TYPELESS:无类型格式,只用来留出一块内存,在绑定到渲染流水线时再指出如何重新解释其中的数据。只有在不得已的情况下才使用无类型资源
  • 一个纹理可以绑定到流水线不同阶段,例如一个纹理既可以作为渲染目标,也可以作为着色器资源,但是不能同时“身兼数职”。
  • 将数据渲染到一个纹理后,再用它作为着色器资源,这个方法称为“渲染到纹理”。
  • 为使纹理扮演渲染目标与着色器资源这两种角色,我们就需要为此纹理资源创建两个描述符,一个存于渲染目标堆中(D3D12_DESCRIPOTR_HEAP_TYPE_RTV),一个位于着色器资源堆中(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV,从着色器资源的枚举名称中可以看出,它也可以存储常量缓冲区视图描述符以及无需访问视图描述符)。接下来便可以把该资源绑定到渲染目标,或者作为着色器的输入与跟签名中的参数相绑定‘’。
//绑定渲染目标
CD3DX12_CPU_DESCRIPTOR_HANDLE rtv = ...;
CD3DX12_CPU_DESCRIPTOR_HANDLE dsv = ...;
cmdList->OMSetRenderTargets(1, &rtv,true,&dsv);
//以着色器输入的名义绑定到根参数
CD3DX12_GUP_DESCRIPTOR_HANDLE tex = ... ;
cmdList->SetGraphicsRootDescriptorTable(rootParamIndex, tex);

  • 资源描述符通知Direct3D这些资源将被如何使用(绑定到哪个阶段)。如果以无类型格式创建资源,那么就要在创建视图时指定其具体类型,这一过程类似对数据进行强制转换。

9.2纹理坐标

  • Direct3D所采用的纹理坐标系是由指向图象水平正方向的u轴与指向图像垂直正方向的v轴所组成的。

  • 取值范围为 0 ⩽ u , v ⩽ 1 0\leqslant u,v\leqslant 1 0u,v1的纹理标定的是一种称为纹素的纹理元素

  • v轴的正方向是“正下方”

  • 通过归一化坐标区间,Direct3D可以摆脱具体纹理尺寸的干扰。

  • 对于每个3D三角形来说,我们需要在将要映射在上面的纹理中定义出与之对应的三角形。

  • p 0 p 1 p 2 p_0p_1p_2 p0<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值