2017-11-02 9 views
0

DirectX 10でメッシュを読み込みましたが、別のメッシュを読み込もうとしていますが、新しいメッシュを追加するたびに元のメッシュは消えます。どのようにして2つのメッシュを同時に表示できますか?DirectX 10で別のメッシュを読み込む方法

const D3D10_INPUT_ELEMENT_DESC layout[] = 
{ 
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, 
    { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 }, 
    { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D10_INPUT_PER_VERTEX_DATA, 0 }, 
}; 
UINT numElements = sizeof(layout)/sizeof(layout[0]); 

// Create the input layout 
D3D10_PASS_DESC PassDesc; 
g_pTechnique->GetPassByIndex(0)->GetDesc(&PassDesc); 
V_RETURN(pd3dDevice->CreateInputLayout(layout, numElements, PassDesc.pIAInputSignature, 
             PassDesc.IAInputSignatureSize, &g_pVertexLayout)); 

// Set the input layout 
pd3dDevice->IASetInputLayout(g_pVertexLayout); 

// Load the mesh 
V_RETURN(g_Mesh.Create(pd3dDevice, L"Tiger\\tiger.sdkmesh", true)); 
V_RETURN(g_Mesh.Create(pd3dDevice, L"Wing\\wing.sdkmesh", true)); 


// Initialize the world matrices 
D3DXMatrixIdentity(&g_World); 

メッシュレンダリング:

// 
// Render the mesh 
// 
UINT Strides[1]; 
UINT Offsets[1]; 
ID3D10Buffer* pVB[1]; 
pVB[0] = g_Mesh.GetVB10(0, 0); 
Strides[0] = (UINT)g_Mesh.GetVertexStride(0, 0); 
Offsets[0] = 0; 
pd3dDevice->IASetVertexBuffers(0, 1, pVB, Strides, Offsets); 
pd3dDevice->IASetIndexBuffer(g_Mesh.GetIB10(0), g_Mesh.GetIBFormat10(0), 0); 

D3D10_TECHNIQUE_DESC techDesc; 
g_pTechnique->GetDesc(&techDesc); 
SDKMESH_SUBSET* pSubset = NULL; 
ID3D10ShaderResourceView* pDiffuseRV = NULL; 
D3D10_PRIMITIVE_TOPOLOGY PrimType; 

for(UINT p = 0; p < techDesc.Passes; ++p) 
{ 
    for(UINT subset = 0; subset < g_Mesh.GetNumSubsets(0); ++subset) 
    { 
     pSubset = g_Mesh.GetSubset(0, subset); 

     PrimType = g_Mesh.GetPrimitiveType10((SDKMESH_PRIMITIVE_TYPE)pSubset->PrimitiveType); 
     pd3dDevice->IASetPrimitiveTopology(PrimType); 

     pDiffuseRV = g_Mesh.GetMaterial(pSubset->MaterialID)->pDiffuseRV10; 
     g_ptxDiffuseVariable->SetResource(pDiffuseRV); 

     g_pTechnique->GetPassByIndex(p)->Apply(0); 
     pd3dDevice->DrawIndexed((UINT)pSubset->IndexCount, 0, (UINT)pSubset->VertexStart); 
    } 
} 

答えて

0

コードは、あなたがそれを求めて正確に何やっているがこれは私が(必要であれば、私はより多くのコードを投稿することができます)これまでに試してみましたが、コードのセクションです操作を行います。

// Load the mesh 
V_RETURN(g_Mesh.Create(pd3dDevice, L"Tiger\\tiger.sdkmesh", true)); 
V_RETURN(g_Mesh.Create(pd3dDevice, L"Wing\\wing.sdkmesh", true)); 

をあなたは、両方のメッシュを同時にロードする場合は、あなたがどんなg_Meshの2つの異なるインスタンスを使用する必要があることである - 私は推測しているどのSDKmesh.cpp/ですこれらの古いサンプルからヘルパーを削除します。

あなたはDirectXの10使用しているだろう、まったくのDirectX 10をサポートしているすべての単一の対応プラットフォームもサポートしてはるかに優れたサポートで、サポートのDirectX 11を、それを使用しても値がありませんなぜ私は知りませんより幅広いハードウェアTL:DR:DirectX 10ではなくDirectX 11を使用

legacy DirectX SDKから、以前のDXSETUPデプロイメントを使用する必要がある、使用されていないD3DX10ユーティリティライブラリを使用しています。代わりにこの機能にopen source replacementsを使用することを検討する必要があります。これは、以前の10.x APIの代わりにDirectX 11を使用していることを前提としています。たとえば、Direct3D 10でEffectsを使用する代わりに、Effects for Direct3D 11を使用できます。

+0

g_Meshの別のインスタンスを作成する方法を理解できません。メッシュをレンダリングするときに完了しますか?レンダーメッシュコードを私の質問に追加しました –

+0

"g_Mesh'の宣言はどこにありますか?あなたはそれをコピーして '' g_Mesh2''を作ったり、それを配列 '' g_Mesh [2] ''にすることはできませんか? –

+0

g_Mesh2を作成しました。あなたの助けに感謝します:-) –

関連する問題