Nanashi-soft○プログラマ専用○DirectX11開発○
//入力用ただ,通しているだけです
struct vertexIn
{
float4 pos : POSITION0;
float4 col : COLOR0;
float2 tex : TEXCOORD0;
};
//出力用
struct vertexOut
{
float4 pos : SV_POSITION;
float4 col : COLOR;
float2 tex : TEXCOORD0;
};
vertexOut vs_main(vertexIn IN)
{
vertexOut OUT;
OUT.pos = IN.pos;
OUT.col = IN.col;
OUT.tex = IN.tex;
return OUT;
}
struct pixcelInピクセルシェーダーでテクスチャーを貼るわけですが,MSDNのマニュアルに↑こう書くように決まっている感じで書かれていました
{
float4 pos : SV_POSITION;
float4 col : COLOR;
float2 tex : TEXCOORD0;
};
Texture2D txDiffuse : register( t0 );
SamplerState samLinear : register( s0 );
float4 ps_main(pixcelIn IN) : SV_Target
{
pixcelIn OUT;
//テクスチャーを貼る
OUT.col = txDiffuse.Sample(samLinear, IN.tex);
return OUT.col;
}
#include <windows.h>頂点シェーダーにポリゴンの構造体を合わせます
#include <tchar.h>
#include <d3d11.h>
#include <d3dx11.h> //追加
#pragma once
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dx11.lib") //追加
//ポリゴン頂点構造体変形していると貼りづらい(と思う)ので,四角形に戻します
struct Vertex3D {
float pos[3]; //x-y-z
float col[4]; //r-g-b-a
float tex[2]; //x-y
};
const int TYOUTEN = 4; //ポリゴンの頂点数頂点シェーダーに頂点レイアウトを合わせます
//頂点データ(四角ポリゴン1枚)
Vertex3D hVectorData[TYOUTEN] = {
//500x811
{ { -0.27f, +0.75f, +0.5f }, { 1.0f, 1.0f, 1.0f, 1.0f }, {0.0f, 0.0f} },
{ { +0.27f, +0.75f, +0.5f }, { 1.0f, 1.0f, 1.0f, 1.0f }, {1.0f, 0.0f} },
{ { -0.27f, -0.75f, +0.5f }, { 1.0f, 1.0f, 1.0f, 1.0f }, {0.0f, 1.0f} },
{ { +0.27f, -0.75f, +0.5f }, { 1.0f, 1.0f, 1.0f, 1.0f }, {1.0f, 1.0f} }
};
//頂点レイアウトメインループの直前に,テクスチャーファイル読み込みを追加します
//5番目のパラメータは先頭からのバイト数なので,COLORにはPOSITIONのfloat型4バイト×3を記述
D3D11_INPUT_ELEMENT_DESC hInElementDesc[] = {
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 4*3, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 4*3 + 4*4, D3D11_INPUT_PER_VERTEX_DATA, 0 }
};
//テクスチャー読み込みこれを実行すると,指定した画像ファイルが貼られます
ID3D11ShaderResourceView* hpShaderResourceView = NULL;
if(FAILED(D3DX11CreateShaderResourceViewFromFile(hpDevice, _T("ira.siyoko.png"), NULL, NULL, &hpShaderResourceView, NULL))){
MessageBox(hWnd, _T("D3DX11CreateShaderResourceViewFromFile"), _T("Err"), MB_ICONSTOP);
goto End;
}
//そのテクスチャーをコンテキストに設定
ID3D11ShaderResourceView* hpShaderResourceViews[] = { hpShaderResourceView };
hpDeviceContext->PSSetShaderResources(0, 1, hpShaderResourceViews);