【DirectX11】テクスチャーを使った描画

シェーダの実装

テクスチャーを使用した描画を行うにはシェーダを修正する必要があります。

Shader.hlsl

struct VS_INPUT
{
	float3 Position : POSITION;
	float4 Color : COLOR;
	float2 UV : TEXCOORD; // テクスチャーのUV値
};

struct VS_OUTPUT
{
	float4 Position : SV_POSITION;
	float4 Color : TEXCOORD0;
	float2 UV : TEXCOORD1; // テクスチャーのUV値
};

void VS(
	in VS_INPUT In,
	out VS_OUTPUT Out
)
{
	Out.Position.xyz = In.Position.xyz;
	Out.Position.w = 1.0f;
	Out.Color = In.Color;
	// UV値をPixelShaderに流す
	Out.UV = In.UV;
}

typedef VS_OUTPUT PS_INPUT;

// テクスチャーとサンプラーステートの定義
Texture2D diffuse : register(t0);
SamplerState samplerDiffuse : register(s0);

void PS(
	in PS_INPUT In,
	out float4 OutColor : SV_Target0
)
{
	// UV値を元にテクスチャーから色をサンプリングする
	float4 tex = diffuse.Sample(samplerDiffuse, In.UV);
	// テクスチャーと頂点カラーを掛け合わせる
	OutColor = In.Color * tex;
}

シェーダの実装で変更した個所は主に2点です。

  • UV値の入力値を追加
  • テクスチャーとサンプラーステートからのサンプリング処理を追加

これだけでシェーダの実装は以外と簡単にできます。

Texture2D diffuse : register(t0);
SamplerState samplerDiffuse : register(s0);

この部分の各行の末尾にある(t0)と(s0)はレジスタ番号を指定しています。
C++のコードからはスロット番号という形で指定するようになっています。

1 2 3 4

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です