「テクスチャを張る」の編集履歴(バックアップ)一覧はこちら
「テクスチャを張る」(2011/03/01 (火) 20:57:00) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<p><strong>テクスチャを張ります。</strong></p>
<p> <img alt="" src="http://www43.atwiki.jp/directx11?cmd=upload&act=open&pageid=19&file=tex.png" /></p>
<p>shader.hlsl</p>
<table border="1" cellspacing="1" cellpadding="1" width="600"><tbody><tr><td>
<p>//グローバル<br />
Texture2D g_texDecal: register(t0);//テクスチャー<br />
SamplerState g_samLinear : register(s0);//サンプラー</p>
<p>//構造体<br />
struct VS_OUTPUT<br />
{<br />
float4 Pos : SV_POSITION;<br />
float2 Tex : TEXCOORD;<br />
};</p>
<p>//頂点シェーダー<br />
VS_OUTPUT VS( float4 Pos : POSITION ,float2 Tex : TEXCOORD )<br />
{<br />
VS_OUTPUT output = (VS_OUTPUT)0;<br />
output.Pos = Pos;<br />
output.Tex = Tex ;</p>
<p> return output;<br />
}</p>
<p>//ピクセルシェーダー<br />
float4 PS( VS_OUTPUT input ) : SV_Target<br />
{<br />
return g_texDecal.Sample( g_samLinear, input.Tex );<br />
}</p>
</td>
</tr></tbody></table><p>main.cpp</p>
<table border="1" cellspacing="1" cellpadding="1" width="600"><tbody><tr><td>
<p>#pragma comment(lib,"d3d11.lib")<br />
#pragma comment(lib,"d3dx11.lib")<br />
#pragma comment(lib,"d3dCompiler.lib")<br />
#include <d3dx11.h><br />
#include <d3dCompiler.h></p>
<p>//安全に解放する<br />
#define SAFE_RELEASE(x) if(x){x->Release(); x=NULL;}</p>
<p>//定数定義<br />
#define WINDOW_WIDTH 320 //ウィンドウ幅<br />
#define WINDOW_HEIGHT 240 //ウィンドウ高さ</p>
<p>//ベクタークラス<br />
class VECTOR2<br />
{<br />
public:<br />
VECTOR2(float,float);<br />
float u;<br />
float v;<br />
};<br />
VECTOR2::VECTOR2(float a, float b)<br />
{<br />
u=a;v=b;<br />
}<br />
class VECTOR3<br />
{<br />
public:<br />
VECTOR3(float,float,float);<br />
float x;<br />
float y;<br />
float z;<br />
};<br />
VECTOR3::VECTOR3(float a,float b,float c)<br />
{<br />
x=a;y=b;z=c;<br />
}</p>
<p>//頂点の構造体<br />
struct SimpleVertex<br />
{<br />
VECTOR3 Pos; //位置<br />
VECTOR2 Uv; //UV座標<br />
};</p>
<p>//グローバル変数<br />
HWND hWnd=NULL;<br />
ID3D11Device* Device = NULL; //デバイス<br />
ID3D11DeviceContext* DeviceContext=NULL; //デバイスコンテキスト<br />
IDXGISwapChain* SwapChain = NULL; //スワップチェイン<br />
ID3D11RenderTargetView* RenderTargetView = NULL; //レンダーターゲットビュー<br />
ID3D11InputLayout* VertexLayout=NULL;<br />
ID3D11Buffer* VertexBuffer=NULL;</p>
<p>ID3D11VertexShader* VertexShader=NULL;//頂点シェーダー<br />
ID3D11PixelShader* PixelShader=NULL;//ピクセルシェーダー</p>
<p>ID3D11SamplerState* SampleLinear=NULL;//テクスチャーのサンプラー<br />
ID3D11ShaderResourceView* Texture=NULL;//テクスチャー</p>
<p>//Direct3Dの初期化関数<br />
HRESULT InitD3D(HWND hWnd)<br />
{<br />
// デバイスとスワップチェーンの作成<br />
DXGI_SWAP_CHAIN_DESC sd;<br />
ZeroMemory( &sd, sizeof(sd) );<br />
sd.BufferCount = 1; //バックバッファの数<br />
sd.BufferDesc.Width = WINDOW_WIDTH; //バッファの幅<br />
sd.BufferDesc.Height = WINDOW_HEIGHT; //バッファの高さ<br />
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //バッファのフォーマット<br />
sd.BufferDesc.RefreshRate.Numerator = 60; //リフレッシュレート<br />
sd.BufferDesc.RefreshRate.Denominator = 1;<br />
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;<br />
sd.OutputWindow = hWnd;<br />
sd.SampleDesc.Count = 1;<br />
sd.SampleDesc.Quality = 0;<br />
sd.Windowed = TRUE;</p>
<p> D3D_FEATURE_LEVEL FeatureLevel = D3D_FEATURE_LEVEL_11_0;</p>
<p><br />
if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_REFERENCE,
NULL,0,<br />
&FeatureLevel,1,D3D11_SDK_VERSION, &sd, &SwapChain,
&Device ,NULL,&DeviceContext) ) )<br />
{<br />
return FALSE;<br />
}<br />
//レンダーターゲットビューの作成<br />
ID3D11Texture2D *BackBuffer;<br />
SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D
),(LPVOID*)&BackBuffer); <br />
Device->CreateRenderTargetView( BackBuffer, NULL, &RenderTargetView
);<br />
BackBuffer->Release();<br />
DeviceContext->OMSetRenderTargets(1, &RenderTargetView,NULL);</p>
<p> //ビューポートの設定<br />
D3D11_VIEWPORT vp;<br />
vp.Width = WINDOW_WIDTH;<br />
vp.Height = WINDOW_HEIGHT;<br />
vp.MinDepth = 0.0f;<br />
vp.MaxDepth = 1.0f;<br />
vp.TopLeftX = 0;<br />
vp.TopLeftY = 0;<br />
DeviceContext->RSSetViewports( 1, &vp );</p>
<p> //hlslファイル読み込み<br />
ID3DBlob *pCompiledShader=NULL;<br />
ID3DBlob *pErrors=NULL;<br />
//ブロブから頂点シェーダー作成<br />
if(FAILED(D3DX11CompileFromFile(L"shader.hlsl",NULL,NULL,"VS","vs_5_0",0,0,NULL,&pCompiledShader,&pErrors,NULL)))<br />
{<br />
MessageBox(0,L"頂点シェーダー読み込み失敗",NULL,MB_OK);<br />
return E_FAIL;<br />
}<br />
SAFE_RELEASE(pErrors);</p>
<p>
if(FAILED(Device->CreateVertexShader(pCompiledShader->GetBufferPointer(),pCompiledShader->GetBufferSize(),NULL,&VertexShader)))<br />
{<br />
SAFE_RELEASE(pCompiledShader);<br />
MessageBox(0,L"頂点シェーダー作成失敗",NULL,MB_OK);<br />
return E_FAIL;<br />
}<br />
//頂点インプットレイアウトを定義 <br />
D3D11_INPUT_ELEMENT_DESC layout[] =<br />
{<br />
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0,
D3D11_INPUT_PER_VERTEX_DATA, 0 },<br />
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12,
D3D11_INPUT_PER_VERTEX_DATA, 0 },<br />
};<br />
UINT numElements = sizeof(layout)/sizeof(layout[0]);</p>
<p> //頂点インプットレイアウトを作成<br />
if( FAILED( Device->CreateInputLayout( layout, numElements,
pCompiledShader->GetBufferPointer(), pCompiledShader->GetBufferSize(),
&VertexLayout ) ) )<br />
return FALSE;<br />
//頂点インプットレイアウトをセット<br />
DeviceContext->IASetInputLayout( VertexLayout );</p>
<p> //ブロブからピクセルシェーダー作成<br />
if(FAILED(D3DX11CompileFromFile(L"shader.hlsl",NULL,NULL,"PS","ps_5_0",0,0,NULL,&pCompiledShader,&pErrors,NULL)))<br />
{<br />
MessageBox(0,L"ピクセルシェーダー読み込み失敗",NULL,MB_OK);<br />
return E_FAIL;<br />
}<br />
SAFE_RELEASE(pErrors);<br />
if(FAILED(Device->CreatePixelShader(pCompiledShader->GetBufferPointer(),pCompiledShader->GetBufferSize(),NULL,&PixelShader)))<br />
{<br />
SAFE_RELEASE(pCompiledShader);<br />
MessageBox(0,L"ピクセルシェーダー作成失敗",NULL,MB_OK);<br />
return E_FAIL;<br />
}<br />
SAFE_RELEASE(pCompiledShader);<br />
//四角形<br />
SimpleVertex vertices[] =<br />
{<br />
VECTOR3( -0.5f,-0.5f,0.5f),VECTOR2(0,1),<br />
VECTOR3(-0.5f,0.5f,0.5f),VECTOR2(0,0),<br />
VECTOR3( 0.5f,-0.5f,0.5f),VECTOR2(1,1),<br />
VECTOR3( 0.5f,0.5f,0.5f),VECTOR2(1,0),<br />
};<br />
D3D11_BUFFER_DESC bd;<br />
bd.Usage = D3D11_USAGE_DEFAULT;<br />
bd.ByteWidth = sizeof( SimpleVertex ) * 4;<br />
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;<br />
bd.CPUAccessFlags = 0;<br />
bd.MiscFlags = 0;<br />
D3D11_SUBRESOURCE_DATA InitData;<br />
InitData.pSysMem = vertices;<br />
if( FAILED( Device->CreateBuffer( &bd, &InitData, &VertexBuffer
) ) )<br />
return FALSE;</p>
<p> //バーテックスバッファーをセット<br />
UINT stride = sizeof( SimpleVertex );<br />
UINT offset = 0;<br />
DeviceContext->IASetVertexBuffers( 0, 1, &VertexBuffer, &stride,
&offset );</p>
<p> //プリミティブ・トポロジーをセット<br />
DeviceContext->IASetPrimitiveTopology(
D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );</p>
<p> //テクスチャー用サンプラー作成<br />
D3D11_SAMPLER_DESC SamDesc;<br />
ZeroMemory(&SamDesc,sizeof(D3D11_SAMPLER_DESC));</p>
<p> SamDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;<br />
SamDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;<br />
SamDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;<br />
SamDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;<br />
Device->CreateSamplerState( &SamDesc, &SampleLinear);<br />
//テクスチャー作成<br />
if(FAILED(D3DX11CreateShaderResourceViewFromFile( Device, L"cosmos.jpg", NULL,
NULL, &Texture, NULL )))<br />
{<br />
return E_FAIL;<br />
}</p>
<p> return S_OK;<br />
}</p>
<p>//レンダリング<br />
VOID Render()<br />
{<br />
float ClearColor[4] = {0,0,0,1 }; //消去色<br />
DeviceContext->ClearRenderTargetView( RenderTargetView, ClearColor
);//画面クリア <br />
//使用するシェーダーの登録<br />
DeviceContext->VSSetShader(VertexShader,NULL,0);<br />
DeviceContext->PSSetShader(PixelShader,NULL,0);</p>
<p> //テクスチャーをシェーダーに渡す<br />
DeviceContext->PSSetSamplers(0,1,&SampleLinear);<br />
DeviceContext->PSSetShaderResources(0,1,&Texture);</p>
<p> //プリミティブをレンダリング<br />
DeviceContext->Draw( 4, 0 );<br />
SwapChain->Present( 0, 0 );//フリップ<br />
}</p>
<p>//終了時解放処理<br />
VOID Cleanup()<br />
{<br />
SAFE_RELEASE(SampleLinear);<br />
SAFE_RELEASE(Texture);<br />
SAFE_RELEASE(VertexShader);<br />
SAFE_RELEASE(PixelShader);<br />
SAFE_RELEASE(VertexBuffer);<br />
SAFE_RELEASE(VertexLayout); <br />
SAFE_RELEASE(SwapChain);<br />
SAFE_RELEASE(RenderTargetView);<br />
SAFE_RELEASE(DeviceContext);<br />
SAFE_RELEASE(Device);<br />
}</p>
<p>//メッセージプロシージャ<br />
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)<br />
{<br />
switch(msg)<br />
{<br />
case WM_DESTROY://終了時<br />
Cleanup();<br />
PostQuitMessage(0);<br />
break;<br />
}<br />
return DefWindowProc (hWnd, msg, wParam, lParam);<br />
}</p>
<p>//メイン関数<br />
INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT
iCmdShow)<br />
{<br />
//ウインドウクラスの登録<br />
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,<br />
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,<br />
L"Window1", NULL };<br />
RegisterClassEx( &wc );<br />
//タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定<br />
RECT rect;<br />
SetRect(&rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);<br />
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);<br />
rect.right=rect.right-rect.left;<br />
rect.bottom=rect.bottom-rect.top;<br />
rect.top=0;<br />
rect.left=0;<br />
//ウインドウの生成<br />
hWnd = CreateWindow( L"Window1", L"テクスチャ",<br />
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right,
rect.bottom,<br />
NULL, NULL, wc.hInstance, NULL );<br />
<br />
MSG msg;<br />
ZeroMemory(&msg,sizeof(msg));<br />
//Direct3D初期化<br />
if(SUCCEEDED(InitD3D(hWnd)))<br />
{<br />
//ウインドウ表示<br />
ShowWindow(hWnd,SW_SHOW);<br />
UpdateWindow(hWnd);<br />
while(msg.message!=WM_QUIT)<br />
{<br />
if( PeekMessage(&msg,NULL,0,0,PM_REMOVE))<br />
{<br />
TranslateMessage(&msg);<br />
DispatchMessage(&msg);<br />
}<br />
else<br />
{<br />
Render();<br />
}<br />
}<br />
}</p>
<p> //終了<br />
return 0;<br />
}</p>
</td>
</tr></tbody></table><p> </p>
<p> </p>
<p><strong>テクスチャを張ります。</strong></p>
<p> <img alt="" src="http://www43.atwiki.jp/directx11?cmd=upload&act=open&pageid=19&file=tex.png" /></p>
<p>cosmos.jpg</p>
<p><img alt="" src="http://www43.atwiki.jp/directx11?cmd=upload&act=open&pageid=19&file=cosmos.jpg" /></p>
<p>shader.hlsl</p>
<table border="1" cellspacing="1" cellpadding="1" width="600"><tbody><tr><td>
<p>//グローバル<br />
Texture2D g_texDecal: register(t0);//テクスチャー<br />
SamplerState g_samLinear : register(s0);//サンプラー</p>
<p>//構造体<br />
struct VS_OUTPUT<br />
{<br />
float4 Pos : SV_POSITION;<br />
float2 Tex : TEXCOORD;<br />
};</p>
<p>//頂点シェーダー<br />
VS_OUTPUT VS( float4 Pos : POSITION ,float2 Tex : TEXCOORD )<br />
{<br />
VS_OUTPUT output = (VS_OUTPUT)0;<br />
output.Pos = Pos;<br />
output.Tex = Tex ;</p>
<p> return output;<br />
}</p>
<p>//ピクセルシェーダー<br />
float4 PS( VS_OUTPUT input ) : SV_Target<br />
{<br />
return g_texDecal.Sample( g_samLinear, input.Tex );<br />
}</p>
</td>
</tr></tbody></table><p>main.cpp</p>
<table border="1" cellspacing="1" cellpadding="1" width="600"><tbody><tr><td>
<p>#pragma comment(lib,"d3d11.lib")<br />
#pragma comment(lib,"d3dx11.lib")<br />
#pragma comment(lib,"d3dCompiler.lib")<br />
#include <d3dx11.h><br />
#include <d3dCompiler.h></p>
<p>//安全に解放する<br />
#define SAFE_RELEASE(x) if(x){x->Release(); x=NULL;}</p>
<p>//定数定義<br />
#define WINDOW_WIDTH 320 //ウィンドウ幅<br />
#define WINDOW_HEIGHT 240 //ウィンドウ高さ</p>
<p>//ベクタークラス<br />
class VECTOR2<br />
{<br />
public:<br />
VECTOR2(float,float);<br />
float u;<br />
float v;<br />
};<br />
VECTOR2::VECTOR2(float a, float b)<br />
{<br />
u=a;v=b;<br />
}<br />
class VECTOR3<br />
{<br />
public:<br />
VECTOR3(float,float,float);<br />
float x;<br />
float y;<br />
float z;<br />
};<br />
VECTOR3::VECTOR3(float a,float b,float c)<br />
{<br />
x=a;y=b;z=c;<br />
}</p>
<p>//頂点の構造体<br />
struct SimpleVertex<br />
{<br />
VECTOR3 Pos; //位置<br />
VECTOR2 Uv; //UV座標<br />
};</p>
<p>//グローバル変数<br />
HWND hWnd=NULL;<br />
ID3D11Device* Device = NULL; //デバイス<br />
ID3D11DeviceContext* DeviceContext=NULL; //デバイスコンテキスト<br />
IDXGISwapChain* SwapChain = NULL; //スワップチェイン<br />
ID3D11RenderTargetView* RenderTargetView = NULL; //レンダーターゲットビュー<br />
ID3D11InputLayout* VertexLayout=NULL;<br />
ID3D11Buffer* VertexBuffer=NULL;</p>
<p>ID3D11VertexShader* VertexShader=NULL;//頂点シェーダー<br />
ID3D11PixelShader* PixelShader=NULL;//ピクセルシェーダー</p>
<p>ID3D11SamplerState* SampleLinear=NULL;//テクスチャーのサンプラー<br />
ID3D11ShaderResourceView* Texture=NULL;//テクスチャー</p>
<p>//Direct3Dの初期化関数<br />
HRESULT InitD3D(HWND hWnd)<br />
{<br />
// デバイスとスワップチェーンの作成<br />
DXGI_SWAP_CHAIN_DESC sd;<br />
ZeroMemory( &sd, sizeof(sd) );<br />
sd.BufferCount = 1; //バックバッファの数<br />
sd.BufferDesc.Width = WINDOW_WIDTH; //バッファの幅<br />
sd.BufferDesc.Height = WINDOW_HEIGHT; //バッファの高さ<br />
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //バッファのフォーマット<br />
sd.BufferDesc.RefreshRate.Numerator = 60; //リフレッシュレート<br />
sd.BufferDesc.RefreshRate.Denominator = 1;<br />
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;<br />
sd.OutputWindow = hWnd;<br />
sd.SampleDesc.Count = 1;<br />
sd.SampleDesc.Quality = 0;<br />
sd.Windowed = TRUE;</p>
<p> D3D_FEATURE_LEVEL FeatureLevel = D3D_FEATURE_LEVEL_11_0;</p>
<p><br />
if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_REFERENCE,
NULL,0,<br />
&FeatureLevel,1,D3D11_SDK_VERSION, &sd, &SwapChain,
&Device ,NULL,&DeviceContext) ) )<br />
{<br />
return FALSE;<br />
}<br />
//レンダーターゲットビューの作成<br />
ID3D11Texture2D *BackBuffer;<br />
SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D
),(LPVOID*)&BackBuffer); <br />
Device->CreateRenderTargetView( BackBuffer, NULL, &RenderTargetView
);<br />
BackBuffer->Release();<br />
DeviceContext->OMSetRenderTargets(1, &RenderTargetView,NULL);</p>
<p> //ビューポートの設定<br />
D3D11_VIEWPORT vp;<br />
vp.Width = WINDOW_WIDTH;<br />
vp.Height = WINDOW_HEIGHT;<br />
vp.MinDepth = 0.0f;<br />
vp.MaxDepth = 1.0f;<br />
vp.TopLeftX = 0;<br />
vp.TopLeftY = 0;<br />
DeviceContext->RSSetViewports( 1, &vp );</p>
<p> //hlslファイル読み込み<br />
ID3DBlob *pCompiledShader=NULL;<br />
ID3DBlob *pErrors=NULL;<br />
//ブロブから頂点シェーダー作成<br />
if(FAILED(D3DX11CompileFromFile(L"shader.hlsl",NULL,NULL,"VS","vs_5_0",0,0,NULL,&pCompiledShader,&pErrors,NULL)))<br />
{<br />
MessageBox(0,L"頂点シェーダー読み込み失敗",NULL,MB_OK);<br />
return E_FAIL;<br />
}<br />
SAFE_RELEASE(pErrors);</p>
<p>
if(FAILED(Device->CreateVertexShader(pCompiledShader->GetBufferPointer(),pCompiledShader->GetBufferSize(),NULL,&VertexShader)))<br />
{<br />
SAFE_RELEASE(pCompiledShader);<br />
MessageBox(0,L"頂点シェーダー作成失敗",NULL,MB_OK);<br />
return E_FAIL;<br />
}<br />
//頂点インプットレイアウトを定義 <br />
D3D11_INPUT_ELEMENT_DESC layout[] =<br />
{<br />
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0,
D3D11_INPUT_PER_VERTEX_DATA, 0 },<br />
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12,
D3D11_INPUT_PER_VERTEX_DATA, 0 },<br />
};<br />
UINT numElements = sizeof(layout)/sizeof(layout[0]);</p>
<p> //頂点インプットレイアウトを作成<br />
if( FAILED( Device->CreateInputLayout( layout, numElements,
pCompiledShader->GetBufferPointer(), pCompiledShader->GetBufferSize(),
&VertexLayout ) ) )<br />
return FALSE;<br />
//頂点インプットレイアウトをセット<br />
DeviceContext->IASetInputLayout( VertexLayout );</p>
<p> //ブロブからピクセルシェーダー作成<br />
if(FAILED(D3DX11CompileFromFile(L"shader.hlsl",NULL,NULL,"PS","ps_5_0",0,0,NULL,&pCompiledShader,&pErrors,NULL)))<br />
{<br />
MessageBox(0,L"ピクセルシェーダー読み込み失敗",NULL,MB_OK);<br />
return E_FAIL;<br />
}<br />
SAFE_RELEASE(pErrors);<br />
if(FAILED(Device->CreatePixelShader(pCompiledShader->GetBufferPointer(),pCompiledShader->GetBufferSize(),NULL,&PixelShader)))<br />
{<br />
SAFE_RELEASE(pCompiledShader);<br />
MessageBox(0,L"ピクセルシェーダー作成失敗",NULL,MB_OK);<br />
return E_FAIL;<br />
}<br />
SAFE_RELEASE(pCompiledShader);<br />
//四角形<br />
SimpleVertex vertices[] =<br />
{<br />
VECTOR3( -0.5f,-0.5f,0.5f),VECTOR2(0,1),<br />
VECTOR3(-0.5f,0.5f,0.5f),VECTOR2(0,0),<br />
VECTOR3( 0.5f,-0.5f,0.5f),VECTOR2(1,1),<br />
VECTOR3( 0.5f,0.5f,0.5f),VECTOR2(1,0),<br />
};<br />
D3D11_BUFFER_DESC bd;<br />
bd.Usage = D3D11_USAGE_DEFAULT;<br />
bd.ByteWidth = sizeof( SimpleVertex ) * 4;<br />
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;<br />
bd.CPUAccessFlags = 0;<br />
bd.MiscFlags = 0;<br />
D3D11_SUBRESOURCE_DATA InitData;<br />
InitData.pSysMem = vertices;<br />
if( FAILED( Device->CreateBuffer( &bd, &InitData, &VertexBuffer
) ) )<br />
return FALSE;</p>
<p> //バーテックスバッファーをセット<br />
UINT stride = sizeof( SimpleVertex );<br />
UINT offset = 0;<br />
DeviceContext->IASetVertexBuffers( 0, 1, &VertexBuffer, &stride,
&offset );</p>
<p> //プリミティブ・トポロジーをセット<br />
DeviceContext->IASetPrimitiveTopology(
D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );</p>
<p> //テクスチャー用サンプラー作成<br />
D3D11_SAMPLER_DESC SamDesc;<br />
ZeroMemory(&SamDesc,sizeof(D3D11_SAMPLER_DESC));</p>
<p> SamDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;<br />
SamDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;<br />
SamDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;<br />
SamDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;<br />
Device->CreateSamplerState( &SamDesc, &SampleLinear);<br />
//テクスチャー作成<br />
if(FAILED(D3DX11CreateShaderResourceViewFromFile( Device, L"cosmos.jpg", NULL,
NULL, &Texture, NULL )))<br />
{<br />
return E_FAIL;<br />
}</p>
<p> return S_OK;<br />
}</p>
<p>//レンダリング<br />
VOID Render()<br />
{<br />
float ClearColor[4] = {0,0,0,1 }; //消去色<br />
DeviceContext->ClearRenderTargetView( RenderTargetView, ClearColor
);//画面クリア <br />
//使用するシェーダーの登録<br />
DeviceContext->VSSetShader(VertexShader,NULL,0);<br />
DeviceContext->PSSetShader(PixelShader,NULL,0);</p>
<p> //テクスチャーをシェーダーに渡す<br />
DeviceContext->PSSetSamplers(0,1,&SampleLinear);<br />
DeviceContext->PSSetShaderResources(0,1,&Texture);</p>
<p> //プリミティブをレンダリング<br />
DeviceContext->Draw( 4, 0 );<br />
SwapChain->Present( 0, 0 );//フリップ<br />
}</p>
<p>//終了時解放処理<br />
VOID Cleanup()<br />
{<br />
SAFE_RELEASE(SampleLinear);<br />
SAFE_RELEASE(Texture);<br />
SAFE_RELEASE(VertexShader);<br />
SAFE_RELEASE(PixelShader);<br />
SAFE_RELEASE(VertexBuffer);<br />
SAFE_RELEASE(VertexLayout); <br />
SAFE_RELEASE(SwapChain);<br />
SAFE_RELEASE(RenderTargetView);<br />
SAFE_RELEASE(DeviceContext);<br />
SAFE_RELEASE(Device);<br />
}</p>
<p>//メッセージプロシージャ<br />
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)<br />
{<br />
switch(msg)<br />
{<br />
case WM_DESTROY://終了時<br />
Cleanup();<br />
PostQuitMessage(0);<br />
break;<br />
}<br />
return DefWindowProc (hWnd, msg, wParam, lParam);<br />
}</p>
<p>//メイン関数<br />
INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT
iCmdShow)<br />
{<br />
//ウインドウクラスの登録<br />
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,<br />
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,<br />
L"Window1", NULL };<br />
RegisterClassEx( &wc );<br />
//タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定<br />
RECT rect;<br />
SetRect(&rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);<br />
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);<br />
rect.right=rect.right-rect.left;<br />
rect.bottom=rect.bottom-rect.top;<br />
rect.top=0;<br />
rect.left=0;<br />
//ウインドウの生成<br />
hWnd = CreateWindow( L"Window1", L"テクスチャ",<br />
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right,
rect.bottom,<br />
NULL, NULL, wc.hInstance, NULL );<br />
<br />
MSG msg;<br />
ZeroMemory(&msg,sizeof(msg));<br />
//Direct3D初期化<br />
if(SUCCEEDED(InitD3D(hWnd)))<br />
{<br />
//ウインドウ表示<br />
ShowWindow(hWnd,SW_SHOW);<br />
UpdateWindow(hWnd);<br />
while(msg.message!=WM_QUIT)<br />
{<br />
if( PeekMessage(&msg,NULL,0,0,PM_REMOVE))<br />
{<br />
TranslateMessage(&msg);<br />
DispatchMessage(&msg);<br />
}<br />
else<br />
{<br />
Render();<br />
}<br />
}<br />
}</p>
<p> //終了<br />
return 0;<br />
}</p>
</td>
</tr></tbody></table><p> </p>
<p> </p>