[directx]ferrai rendern und anzeigen lassen

01/25/2010 16:10 Gianotti#1
ich versuche mich gerade an directx mithilfe von c++ und möchte zunächst ein 3d modell eines ferraris rendern und es einfach anzeigen lassen . ich besitze genug kenntnisse um diverse formen zu rendern jedoch habe ich keinen blassen schimmer wie ich mein modell gerendert bekomme.

guten tag noch
01/27/2010 19:33 Helo_#2
Wenn du schon ein Window mit DirectX erstellen kannst dann schau
dir mal diese schritte an.

Laden kannst du Modelle mithilfe von: D3DXLoadMeshFromX

Bsp:
//////////////////////////////////////////////////
LPD3DXBUFFER pD3DXMtrlBuffer;
LPD3DXMESH g_pMesh = NULL;
D3DMATERIAL9 *g_pMeshMaterials = NULL;
LPDIRECT3DTEXTURE9 *g_pMeshTextures = NULL;
unsigned long g_dwNumMaterials = 0L;

D3DXLoadMeshFromX( "deinmodel.x", D3DXMESH_SYSTEMMEM,
g_pd3dDevice, NULL,
&pD3DXMtrlBuffer, NULL, &g_dwNumMaterials,
&g_pMesh );

D3DXMATERIAL *d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
g_pMeshMaterials = new D3DMATERIAL9[g_dwNumMaterials];
g_pMeshTextures = new LPDIRECT3DTEXTURE9[g_dwNumMaterials];

for( unsigned long i = 0; i < g_dwNumMaterials; ++i )
{
g_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;
g_pMeshMaterials[i].Ambient = g_pMeshMaterials[i].Diffuse;
g_pMeshTextures[i] = NULL;
//Texture Laden
D3DXCreateTextureFromFile( g_pd3dDevice, d3dxMaterials[i].pTextureFilename,
&g_pMeshTextures[i] );
}

pD3DXMtrlBuffer->Release();

//////////////////////////////////////////////////////////

und dann nach BeginScene:

///////////////////////////////////////////////////////////

g_pd3dDevice->BeginScene();

for( unsigned long i = 0; i < g_dwNumMaterials; ++i )
{
g_pd3dDevice->SetMaterial( &g_pMeshMaterials[i] );
g_pd3dDevice->SetTexture( 0, g_pMeshTextures[i] );
g_pMesh->DrawSubset( i );
}
......
/////////////////////////////////////////////////////////////

Leider bin ich auch keine experte bei DirectX.

mfg Helo
01/27/2010 19:47 Gianotti#3
Quote:
Originally Posted by Helo_ View Post
Wenn du schon ein Window mit DirectX erstellen kannst dann schau
dir mal diese schritte an.

Laden kannst du Modelle mithilfe von: D3DXLoadMeshFromX

Bsp:
//////////////////////////////////////////////////
LPD3DXBUFFER pD3DXMtrlBuffer;
LPD3DXMESH g_pMesh = NULL;
D3DMATERIAL9 *g_pMeshMaterials = NULL;
LPDIRECT3DTEXTURE9 *g_pMeshTextures = NULL;
unsigned long g_dwNumMaterials = 0L;

D3DXLoadMeshFromX( "deinmodel.x", D3DXMESH_SYSTEMMEM,
g_pd3dDevice, NULL,
&pD3DXMtrlBuffer, NULL, &g_dwNumMaterials,
&g_pMesh );

D3DXMATERIAL *d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
g_pMeshMaterials = new D3DMATERIAL9[g_dwNumMaterials];
g_pMeshTextures = new LPDIRECT3DTEXTURE9[g_dwNumMaterials];

for( unsigned long i = 0; i < g_dwNumMaterials; ++i )
{
g_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;
g_pMeshMaterials[i].Ambient = g_pMeshMaterials[i].Diffuse;
g_pMeshTextures[i] = NULL;
//Texture Laden
D3DXCreateTextureFromFile( g_pd3dDevice, d3dxMaterials[i].pTextureFilename,
&g_pMeshTextures[i] );
}

pD3DXMtrlBuffer->Release();

//////////////////////////////////////////////////////////

und dann nach BeginScene:

///////////////////////////////////////////////////////////

g_pd3dDevice->BeginScene();

for( unsigned long i = 0; i < g_dwNumMaterials; ++i )
{
g_pd3dDevice->SetMaterial( &g_pMeshMaterials[i] );
g_pd3dDevice->SetTexture( 0, g_pMeshTextures[i] );
g_pMesh->DrawSubset( i );
}
......
/////////////////////////////////////////////////////////////

Leider bin ich auch keine experte bei DirectX.

mfg Helo
danke für den text :)