元画像 | テクスチャ |
---|---|
![]() | ![]() |
【ステップ1−1 テクスチャ生成用フィルタの除去】 | 解説 |
![]() |
ワークスペース(左図の部分)から、 d3dmain.cpp をダブルクリックして開きます。 すると画面は、図2の様になったはずです。 |
図1 ワークスペース |
![]() |
図2 d3dmain.cpp |
![]() |
次に、図3のようにして編集メニューから検索コマンドを選びます。 すると、図4のようなダイアログウィンドウが出てきます、 ここでは、RestoreDeviceObjects というキーワードで検索を実行。 すると画面は、リスト1aのようになったはずです。 違うようなら、「次を検索」で検索を繰り返してみて下さい。 | |
![]() | ||
図4 検索ウィンドウ
| 図3 検索コマンド |
改造前 |
---|
HRESULT RestoreDeviceObjects() { LPDIRECT3DSURFACE8 pBackBuffer; g_lpD3DDEV->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ); pBackBuffer->GetDesc( &g_d3dsdBackBuffer ); pBackBuffer->Release(); D3DXCreateTextureFromResourceEx(g_lpD3DDEV, GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1), 0,0,1,0, D3DFMT_A1R5G5B5,D3DPOOL_MANAGED, D3DX_FILTER_LINEAR,D3DX_FILTER_LINEAR, D3DCOLOR_XRGB(0,255,255), // Color key. NULL,NULL,&g_pTexture); HFONT hf; hf = CreateFont(16,0,0,0,0,false,false,false,ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE,""); if (hf != NULL){ D3DXCreateFont(g_lpD3DDEV,hf,&g_pFont); DeleteObject(hf); } g_fTexImageWidth = 1.0f; g_fTexImageHeight = 1.0f; return S_OK; } |
リスト1a |
改造後 | |
---|---|
HRESULT RestoreDeviceObjects() { LPDIRECT3DSURFACE8 pBackBuffer; D3DSURFACE_DESC d3dsDesc; DWORD tw,th; D3DXIMAGE_INFO srcImgInfo; g_lpD3DDEV->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ); pBackBuffer->GetDesc( &g_d3dsdBackBuffer ); pBackBuffer->Release(); D3DXCreateTextureFromResourceEx(g_lpD3DDEV, GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1), 0,0,1,0, D3DFMT_A1R5G5B5,D3DPOOL_MANAGED, D3DX_FILTER_NONE,D3DX_FILTER_NONE, D3DCOLOR_XRGB(0,255,255), // Color key. &srcImgInfo,NULL,&g_pTexture); HFONT hf; hf = CreateFont(16,0,0,0,0,false,false,false,ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE,""); if (hf != NULL){ D3DXCreateFont(g_lpD3DDEV,hf,&g_pFont); DeleteObject(hf); } g_fTexImageWidth = 1.0f; g_fTexImageHeight = 1.0f; if (g_pTexture){ if (S_OK == g_pTexture->GetLevelDesc(0,&d3dsDesc)){ tw = srcImgInfo.Width; th = srcImgInfo.Height; g_fTexImageWidth = (float)tw; g_fTexImageWidth /= (float)d3dsDesc.Width; g_fTexImageHeight = (float)th; g_fTexImageHeight /= (float)d3dsDesc.Height; } } return S_OK; } |
|
リスト1b |
解説 |
リスト1aをリスト1bの内容に入れ替えてください。
ここでは、元画像のサイズとテクスチャのサイズを取得して、 (元画像サイズ)÷(テクスチャサイズ)の形でテクスチャを利用します。 テクスチャに適用するフィルタをD3DX_FILTER_NONE にすることで、 テクスチャの状態は下図の様になっています。 このうち、テクスチャの読み込まれた部分のみを使用する訳です。 |
元画像 | テクスチャ |
---|---|
![]() | ![]() |
【ステップ1−2 描画用フィルタの除去】 | 解説 | |
![]() |
次に、図3のようにして編集メニューから検索コマンドを選びます。 すると、図4のようなダイアログウィンドウが出てきます、 ここでは、SetDefaultRenderState というキーワードで検索を実行。 すると画面は、リスト2aのようになったはずです。 違うようなら、「次を検索」で検索を繰り返してみて下さい。 | |
![]() | ||
図4 検索ウィンドウ
| 図3 検索コマンド |
改造前 |
---|
void SetDefaultRenderState(LPDIRECT3DDEVICE8 lpd3ddev) { lpd3ddev->SetRenderState(D3DRS_ZENABLE,FALSE); lpd3ddev->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW); lpd3ddev->SetRenderState(D3DRS_DITHERENABLE, TRUE ); lpd3ddev->SetRenderState(D3DRS_BLENDOP,FALSE); lpd3ddev->LightEnable( 0, FALSE ); lpd3ddev->SetRenderState( D3DRS_LIGHTING, FALSE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_COLOROP, D3DTOP_MODULATE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_COLORARG1,D3DTA_TEXTURE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_COLORARG2,D3DTA_DIFFUSE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_MIPFILTER,D3DTEXF_LINEAR ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_MAGFILTER,D3DTEXF_LINEAR ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_MINFILTER,D3DTEXF_LINEAR ); } |
リスト2a |
改造後 | |
---|---|
void SetDefaultRenderState(LPDIRECT3DDEVICE8 lpd3ddev) { lpd3ddev->SetRenderState(D3DRS_ZENABLE,FALSE); lpd3ddev->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW); lpd3ddev->SetRenderState(D3DRS_DITHERENABLE, TRUE ); lpd3ddev->SetRenderState(D3DRS_BLENDOP,FALSE); lpd3ddev->LightEnable( 0, FALSE ); lpd3ddev->SetRenderState( D3DRS_LIGHTING, FALSE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_COLOROP, D3DTOP_MODULATE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_COLORARG1,D3DTA_TEXTURE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_COLORARG2,D3DTA_DIFFUSE ); |
|
g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_MIPFILTER,D3DTEXF_NONE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_MAGFILTER,D3DTEXF_NONE ); g_lpD3DDEV->SetTextureStageState( 0,D3DTSS_MINFILTER,D3DTEXF_NONE ); |
|
} |
|
リスト2b |
解説 |
リスト2bの明るい部分が変更部分です。
ミップマップ用・拡大用・縮小用の3つのフィルタを いずれも フィルタ無しに設定しています。 |