【DirectX/メタセコイア】モデルを半透明に描画する方法
Posted: 2012年4月07日(土) 08:49
メタセコイアで作成したモデルをXファイルで読み込み、半透明のオブジェクトとして描画したいのですが上手くいきません。
不透明度を調整しても真っ白になってしまいます。
【実装手順】
メタセコイア製の板ポリゴンを読み込んでいます。(材質設定は参考画像1を参照してください。)
モデルを半透明に描画する方法が知りたいです。(青い背景に緑のモデルを半透明に合成したい)
一日悩みましたが、なぜ半透明にならずに白になるのかさっぱり分からず困っています。
ちなみに材質設定の自己照明を1に近づければ、モデルは白から緑にはなりますが半透明にはなりません。
ご教授のほどよろしくお願いします。
■環境
OS : WindowsXP
コンパイラ名 : VC++ 2008EE
不透明度を調整しても真っ白になってしまいます。
【実装手順】
メタセコイア製の板ポリゴンを読み込んでいます。(材質設定は参考画像1を参照してください。)
// バッファのクリア//
if(FAILED(m_pD3DDevice->Clear(0,NULL,
D3DCLEAR_TARGET |
D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(0,0,255),
1.0f,
0))) {
return;
}
// Xファイルの読み込み//
//--------------------------------------
if(FAILED( D3DXLoadMeshFromX( TEXT("ita.x"),
D3DXMESH_SYSTEMMEM,
pD3DDevice,
NULL,
&m_pD3DXMtrlBuffer,
NULL,
&m_numMtrl,
&m_pMesh ))) {
return E_FAIL;
}
//レンダリング設定//
pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
//ライト設定(TRUEにしても結果は変わらず)
pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
pD3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
pD3DDevice->SetRenderState( D3DRS_DITHERENABLE, TRUE );
pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
//座標変換関数//
Transform(LPDIRECT3DDEVICE9 pD3DDevice)
if(pD3DDevice == 0) {
return;
D3DXMatrixIdentity(&m_view);
// カメラ設定
D3DXMatrixLookAtLH(&m_view,
&D3DXVECTOR3( 0.0f, 0.0f, -12.0f), // カメラの位置
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f), // カメラの方向を向ける点
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f)); // カメラの上の方向
pD3DDevice->SetTransform(D3DTS_VIEW, &m_view);
//射影設定
D3DVIEWPORT9 vp;
if(FAILED(pD3DDevice->GetViewport(&vp))) {
return;
}
float aspect;
aspect = (float)vp.Width / (float)vp.Height;
D3DXMatrixIdentity(&m_proj);
D3DXMatrixPerspectiveFovLH(&m_proj,
D3DXToRadian(45.0f),
aspect,
1.0f,
1000.0f);
pD3DDevice->SetTransform(D3DTS_PROJECTION, &m_proj);
}
//描画//
Transform(pD3DDevice);
D3DXMatrixIdentity(&m_world);
pD3DDevice->SetTransform(D3DTS_WORLD, &m_world);
D3DMATERIAL9 mMaterial;
D3DXMATERIAL* mD3DXMaterials = (D3DXMATERIAL*)m_pD3DXMtrlBuffer->GetBufferPointer();
for( DWORD i =0; i<m_numMtrl; i++){
mMaterial = mD3DXMaterials[i].MatD3D;
pD3DDevice->SetMaterial( &mMaterial);
m_pMesh->DrawSubset( i );
}
モデルを半透明に描画する方法が知りたいです。(青い背景に緑のモデルを半透明に合成したい)
一日悩みましたが、なぜ半透明にならずに白になるのかさっぱり分からず困っています。
ちなみに材質設定の自己照明を1に近づければ、モデルは白から緑にはなりますが半透明にはなりません。
ご教授のほどよろしくお願いします。
■環境
OS : WindowsXP
コンパイラ名 : VC++ 2008EE