Как избавиться от такого:
Слева - вид с боку, справа - вид сверху.
Причем сфера находится ПОД кубом.
Буфер глубины вроде включил. Если нужен остальной код, могу выложить
Инициализация:
bool Engine::InitDirect()
{
pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if(pD3D == 0)
{
MessageBox(0, "Cannot create pD3D", "error", 0);
return false;
}
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
HRESULT hr = pD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,
&pDevice );
if(FAILED(hr))
{
MessageBox(0, "Cannot create pDevice", "error", 0);
return false;
}
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
return true;
}
Рисование картинки:
void Engine::Render()
{
pDevice->Clear( 0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffcfcf, 1.0f, 0 );
pDevice->BeginScene();
list<IUnit*>::iterator iter;
for(iter = unitList.begin();iter != unitList.end();++iter)
{
(*iter)->Move();
(*iter)->Draw(pDevice);
}
camera.Set(pDevice);
ShowFPS();
pDevice->EndScene();
pDevice->Present( NULL, NULL, NULL, NULL );
}