テクスチャを張る

「テクスチャを張る」の編集履歴(バックアップ)一覧はこちら

テクスチャを張る」(2011/03/01 (火) 20:57:00) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p><strong>テクスチャを張ります。</strong></p> <p> <img alt="" src="http://www43.atwiki.jp/directx11?cmd=upload&amp;act=open&amp;pageid=19&amp;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 &lt;d3dx11.h&gt;<br /> #include &lt;d3dCompiler.h&gt;</p> <p>//安全に解放する<br /> #define SAFE_RELEASE(x) if(x){x-&gt;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( &amp;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 />      &amp;FeatureLevel,1,D3D11_SDK_VERSION, &amp;sd, &amp;SwapChain, &amp;Device ,NULL,&amp;DeviceContext) ) )<br />     {<br />         return FALSE;<br />     }<br />  //レンダーターゲットビューの作成<br />  ID3D11Texture2D *BackBuffer;<br />     SwapChain-&gt;GetBuffer( 0, __uuidof( ID3D11Texture2D ),(LPVOID*)&amp;BackBuffer);   <br />     Device-&gt;CreateRenderTargetView( BackBuffer, NULL, &amp;RenderTargetView );<br />     BackBuffer-&gt;Release();<br />  DeviceContext-&gt;OMSetRenderTargets(1, &amp;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-&gt;RSSetViewports( 1, &amp;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,&amp;pCompiledShader,&amp;pErrors,NULL)))<br />  {<br />   MessageBox(0,L"頂点シェーダー読み込み失敗",NULL,MB_OK);<br />   return E_FAIL;<br />     }<br />  SAFE_RELEASE(pErrors);</p> <p>  if(FAILED(Device-&gt;CreateVertexShader(pCompiledShader-&gt;GetBufferPointer(),pCompiledShader-&gt;GetBufferSize(),NULL,&amp;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-&gt;CreateInputLayout( layout, numElements, pCompiledShader-&gt;GetBufferPointer(), pCompiledShader-&gt;GetBufferSize(), &amp;VertexLayout ) ) )<br />   return FALSE;<br />  //頂点インプットレイアウトをセット<br />  DeviceContext-&gt;IASetInputLayout( VertexLayout );</p> <p> //ブロブからピクセルシェーダー作成<br />  if(FAILED(D3DX11CompileFromFile(L"shader.hlsl",NULL,NULL,"PS","ps_5_0",0,0,NULL,&amp;pCompiledShader,&amp;pErrors,NULL)))<br />  {<br />   MessageBox(0,L"ピクセルシェーダー読み込み失敗",NULL,MB_OK);<br />   return E_FAIL;<br />     }<br />  SAFE_RELEASE(pErrors);<br />  if(FAILED(Device-&gt;CreatePixelShader(pCompiledShader-&gt;GetBufferPointer(),pCompiledShader-&gt;GetBufferSize(),NULL,&amp;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-&gt;CreateBuffer( &amp;bd, &amp;InitData, &amp;VertexBuffer ) ) )<br />   return FALSE;</p> <p> //バーテックスバッファーをセット<br />  UINT stride = sizeof( SimpleVertex );<br />  UINT offset = 0;<br />  DeviceContext-&gt;IASetVertexBuffers( 0, 1, &amp;VertexBuffer, &amp;stride, &amp;offset );</p> <p> //プリミティブ・トポロジーをセット<br />  DeviceContext-&gt;IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );</p> <p> //テクスチャー用サンプラー作成<br />  D3D11_SAMPLER_DESC SamDesc;<br />  ZeroMemory(&amp;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-&gt;CreateSamplerState( &amp;SamDesc, &amp;SampleLinear);<br />  //テクスチャー作成<br />  if(FAILED(D3DX11CreateShaderResourceViewFromFile( Device, L"cosmos.jpg", NULL, NULL, &amp;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-&gt;ClearRenderTargetView( RenderTargetView, ClearColor );//画面クリア <br />  //使用するシェーダーの登録<br />  DeviceContext-&gt;VSSetShader(VertexShader,NULL,0);<br />  DeviceContext-&gt;PSSetShader(PixelShader,NULL,0);</p> <p> //テクスチャーをシェーダーに渡す<br />  DeviceContext-&gt;PSSetSamplers(0,1,&amp;SampleLinear);<br />  DeviceContext-&gt;PSSetShaderResources(0,1,&amp;Texture);</p> <p> //プリミティブをレンダリング<br />  DeviceContext-&gt;Draw( 4, 0 );<br />  SwapChain-&gt;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( &amp;wc );<br />  //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定<br />  RECT rect;<br />  SetRect(&amp;rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);<br />  AdjustWindowRect(&amp;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(&amp;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(&amp;msg,NULL,0,0,PM_REMOVE))<br />    {<br />     TranslateMessage(&amp;msg);<br />     DispatchMessage(&amp;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&amp;act=open&amp;pageid=19&amp;file=tex.png" /></p> <p>cosmos.jpg</p> <p><img alt="" src="http://www43.atwiki.jp/directx11?cmd=upload&amp;act=open&amp;pageid=19&amp;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 &lt;d3dx11.h&gt;<br /> #include &lt;d3dCompiler.h&gt;</p> <p>//安全に解放する<br /> #define SAFE_RELEASE(x) if(x){x-&gt;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( &amp;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 />      &amp;FeatureLevel,1,D3D11_SDK_VERSION, &amp;sd, &amp;SwapChain, &amp;Device ,NULL,&amp;DeviceContext) ) )<br />     {<br />         return FALSE;<br />     }<br />  //レンダーターゲットビューの作成<br />  ID3D11Texture2D *BackBuffer;<br />     SwapChain-&gt;GetBuffer( 0, __uuidof( ID3D11Texture2D ),(LPVOID*)&amp;BackBuffer);   <br />     Device-&gt;CreateRenderTargetView( BackBuffer, NULL, &amp;RenderTargetView );<br />     BackBuffer-&gt;Release();<br />  DeviceContext-&gt;OMSetRenderTargets(1, &amp;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-&gt;RSSetViewports( 1, &amp;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,&amp;pCompiledShader,&amp;pErrors,NULL)))<br />  {<br />   MessageBox(0,L"頂点シェーダー読み込み失敗",NULL,MB_OK);<br />   return E_FAIL;<br />     }<br />  SAFE_RELEASE(pErrors);</p> <p>  if(FAILED(Device-&gt;CreateVertexShader(pCompiledShader-&gt;GetBufferPointer(),pCompiledShader-&gt;GetBufferSize(),NULL,&amp;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-&gt;CreateInputLayout( layout, numElements, pCompiledShader-&gt;GetBufferPointer(), pCompiledShader-&gt;GetBufferSize(), &amp;VertexLayout ) ) )<br />   return FALSE;<br />  //頂点インプットレイアウトをセット<br />  DeviceContext-&gt;IASetInputLayout( VertexLayout );</p> <p> //ブロブからピクセルシェーダー作成<br />  if(FAILED(D3DX11CompileFromFile(L"shader.hlsl",NULL,NULL,"PS","ps_5_0",0,0,NULL,&amp;pCompiledShader,&amp;pErrors,NULL)))<br />  {<br />   MessageBox(0,L"ピクセルシェーダー読み込み失敗",NULL,MB_OK);<br />   return E_FAIL;<br />     }<br />  SAFE_RELEASE(pErrors);<br />  if(FAILED(Device-&gt;CreatePixelShader(pCompiledShader-&gt;GetBufferPointer(),pCompiledShader-&gt;GetBufferSize(),NULL,&amp;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-&gt;CreateBuffer( &amp;bd, &amp;InitData, &amp;VertexBuffer ) ) )<br />   return FALSE;</p> <p> //バーテックスバッファーをセット<br />  UINT stride = sizeof( SimpleVertex );<br />  UINT offset = 0;<br />  DeviceContext-&gt;IASetVertexBuffers( 0, 1, &amp;VertexBuffer, &amp;stride, &amp;offset );</p> <p> //プリミティブ・トポロジーをセット<br />  DeviceContext-&gt;IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );</p> <p> //テクスチャー用サンプラー作成<br />  D3D11_SAMPLER_DESC SamDesc;<br />  ZeroMemory(&amp;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-&gt;CreateSamplerState( &amp;SamDesc, &amp;SampleLinear);<br />  //テクスチャー作成<br />  if(FAILED(D3DX11CreateShaderResourceViewFromFile( Device, L"cosmos.jpg", NULL, NULL, &amp;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-&gt;ClearRenderTargetView( RenderTargetView, ClearColor );//画面クリア <br />  //使用するシェーダーの登録<br />  DeviceContext-&gt;VSSetShader(VertexShader,NULL,0);<br />  DeviceContext-&gt;PSSetShader(PixelShader,NULL,0);</p> <p> //テクスチャーをシェーダーに渡す<br />  DeviceContext-&gt;PSSetSamplers(0,1,&amp;SampleLinear);<br />  DeviceContext-&gt;PSSetShaderResources(0,1,&amp;Texture);</p> <p> //プリミティブをレンダリング<br />  DeviceContext-&gt;Draw( 4, 0 );<br />  SwapChain-&gt;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( &amp;wc );<br />  //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定<br />  RECT rect;<br />  SetRect(&amp;rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);<br />  AdjustWindowRect(&amp;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(&amp;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(&amp;msg,NULL,0,0,PM_REMOVE))<br />    {<br />     TranslateMessage(&amp;msg);<br />     DispatchMessage(&amp;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>

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。