Как загрузить другую сетку в Directx 10

Мне удалось загрузить сетку в 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 это — я думаю, это SDKmesh.cpp / SDKMesh.h вспомогательные вещи из тех старых образцов.

Я не знаю, почему вы используете DirectX 10. Его вообще нет смысла использовать, поскольку каждая поддерживаемая платформа, поддерживающая DirectX 10, также поддерживает DirectX 11, который гораздо лучше поддерживается и поддерживает более широкий спектр оборудования. TL; DR: использовать DirectX 11, а не DirectX 10

Вы используете устаревший D3DX10 служебная библиотека из устаревший DirectX SDK, который требует использования старого развертывания DXSETUP. Вы должны рассмотреть вместо этого использование замены с открытым исходным кодом для этой функции — что опять-таки предполагает, что вы используете DirectX 11 вместо старого 10.x API. Например, вместо использования эффектов для Direct3D 10, вы можете использовать Эффекты для Direct3D 11.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector