06/12/2020
纹理贴图
基础纹理介绍
纹理坐标系(UV坐标系)
一张图片有横坐标轴和竖坐标轴,横坐标轴叫u,竖坐标轴叫v,原点在图片的左上角
纹理读取
DirectXTK中有DDSTextureLoader和WICTextureLoader的源文件和头文件,可以方便的解析dds和wic文件格式
createDDSTextureFromFile函数–从文件读取DDS纹理
HRESULT CreateDDSTxtureFromFile(
ID3D11Device* d3dDevice, //Device
const wchar_t* szFileName, //dds file name
ID3D11Resource** texture, //输出一个指向资源接口类的接口
ID3D11ShaderResourceView** textureView, //输出一个指向着色器资源视图的指针
size_t maxsize = 0,
DDS_ALPHA_MODE* alphaMode = nullptr
);
createWICTextureFromFile函数
HRESULT CreateWICTxtureFromFile(
ID3D11Device* d3dDevice, //Device
const wchar_t* szFileName, //dds file name
ID3D11Resource** texture, //输出一个指向资源接口类的接口
ID3D11ShaderResourceView** textureView, //输出一个指向着色器资源视图的指针
size_t maxsize = 0
);
注意:这里主要为了创建一个ID3D11ShaderResourceView着色器资源视图,因为纹理资源不能直接使用
HLSL 变动
- 加入uv顶点
- 加入纹理
- 加入采样器
Texture2D gTex:register(t0); //保存2D纹理信息
SamplerState gSamLinear:register(s0); //确定采样器如何采样
struct VertexPosNormalTex
{
float3 PosL:POSITION;
float3 NormalL:NORMAL;
float2 Tex:TEXCOORD;
};
顶点布局
struct VertexPosNormalTex
{
DirectX::XMFLOAT3 pos;
DirectX::XMFLOAT3 normal;
DirectX::XMFLOAT2 tex;
static const D3D11_INPUT_ELEMENT_DESC inputLayout