Posto un pò di codice, magari qualcuno capisce se l'errore è lì:
Inizializazzione delle DirectX:
Codice:
bool dxMgr::init(HWND hwnd, int width, int height, bool fullscreen)
{
HRESULT hr;
direct3d = Direct3DCreate9( D3D_SDK_VERSION );
if(direct3d == NULL)
{
return false;
}
bool windowed = true;
if (fullscreen){
windowed = false;
}
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = windowed;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferHeight = height;
d3dpp.BackBufferWidth = width;
d3dpp.hDeviceWindow = hwnd;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
hr = direct3d->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hwnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,
&direct3dDevice
);
if( FAILED(hr)){
return false;
}
direct3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
direct3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
direct3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
direct3dDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
direct3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
direct3dDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
direct3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
return true;
}
Caricamento della mesh:
Codice:
bool Model::loadModel(LPDIRECT3DDEVICE9 device, std::string filename){
HRESULT hr;
scale = D3DXVECTOR3(1.0f, 1.0f , 1.0f);
position = D3DXVECTOR3(0.0f, 0.0f , 0.0f);
rotation = D3DXVECTOR3(0.0f, 0.0f , 0.0f);
hr = D3DXLoadMeshFromXA(filename.c_str(),
D3DXMESH_SYSTEMMEM,
device,
NULL,
&materialBuffer,
NULL,
&materialCount,
&mesh);
if FAILED(hr){
return false;
}
D3DXMATERIAL* modelMaterials = (D3DXMATERIAL*)materialBuffer->GetBufferPointer();
materials = new D3DMATERIAL9[materialCount];
textures = new LPDIRECT3DTEXTURE9[materialCount];
for(DWORD i = 0; i < materialCount; i++)
{
materials[i] = modelMaterials[i].MatD3D;
hr = D3DXCreateTextureFromFileA( device, modelMaterials[i].pTextureFilename, &textures[i] );
if FAILED(hr){
textures[i] = NULL;
}
}
if (materialBuffer){
materialBuffer->Release();
}
return true;
}
Oppure il problema e quando creo la mesh con 3ds e la esporto, e in quel caso qualcuno sa consigliarmi qualche tutorial adeguato?