W
eigentlivh gibt es nur zwei möglichkeiten , wo der "fehler" sein kann. erstens die initialisierung von directX :
bool D3DApp::InitDirect3D()
{
//Get interface to Direct3D
m_pDirect3D = Direct3DCreate9(D3D_SDK_VERSION);
if(!m_pDirect3D)
{
MessageBox(NULL, "Failed to create direct3D com object", NULL, NULL);
return false;
}
//Check device capabilities
D3DCAPS9 m_d3dDevCaps;
m_pDirect3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &m_d3dDevCaps);
int vp;
if(m_d3dDevCaps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
{
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
}
else
{
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}
//Fill out the present paramters
ZeroMemory(&m_d3dpp, sizeof(D3DPRESENT_PARAMETERS));
m_d3dpp.BackBufferWidth = m_uiClientWidth;
m_d3dpp.BackBufferHeight = m_uiClientHeight;
m_d3dpp.Windowed = false;
m_d3dpp.BackBufferCount = 1;
m_d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
m_d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
m_d3dpp.MultiSampleQuality = 0;
m_d3dpp.hDeviceWindow = m_hAppWindow;
m_d3dpp.Flags = 0;
m_d3dpp.EnableAutoDepthStencil = true;
m_d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
m_d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
m_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
m_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
//Create the device
m_pDirect3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, m_hAppWindow, vp, &m_d3dpp, &m_pDevice3D);
if(!m_pDevice3D)
{
MessageBox(NULL, "Failed device creation", NULL, NULL);
return false;
}
D3DVIEWPORT9 viewport;
ZeroMemory(&viewport, sizeof(D3DVIEWPORT9));
viewport.X = 0;
viewport.Y = 0;
viewport.Width = m_uiClientWidth;
viewport.Height = m_uiClientHeight;
viewport.MinZ = 0;
viewport.MaxZ =1;
m_pDevice3D->SetViewport(&viewport);
return true;
}
oder beim initialisieren der objecte un co. :
void TestApp::RestoreDeviceObjects()
{
for (int x = 0; x < MAPHEIGHT; x++)
for (int y = 0; y < MAPWIDHT; y++)
block[x][y]->Initialize(m_pDevice3D);
bar1->Initialize(m_pDevice3D);
bar2->Initialize(m_pDevice3D);
bar3->Initialize(m_pDevice3D);
bar4->Initialize(m_pDevice3D);
bar5->Initialize(m_pDevice3D);
bar6->Initialize(m_pDevice3D);
lantern1->Initialize(m_pDevice3D);
lantern2->Initialize(m_pDevice3D);
lantern3->Initialize(m_pDevice3D);
mygrass->Init(D3DXVECTOR3(0.0f, 0.0f, 0.0f), D3DXVECTOR3(0.0f, 0.0f, 0.0f), D3DXVECTOR3(0.0f, 0.0f, 0.0f), m_pDevice3D, NumLights);
SystemCls->Init(m_pDevice3D);
D3DXMATRIX view;
D3DXMATRIX proj;
//SET VIEW
D3DXVECTOR3 position = D3DXVECTOR3(0.0f, 12.0f, -10.0f);
D3DXVECTOR3 target = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
D3DXVECTOR3 up = D3DXVECTOR3(0.0f, 10.0f, 0.0f);
D3DXMatrixLookAtLH(&view, &position, &target, &up);
m_pDevice3D->SetTransform(D3DTS_VIEW, &view);
////SET PROJECTION
D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI/4, static_cast<float>(m_uiClientWidth)/m_uiClientHeight, 1.0f, 1000.0f);
m_pDevice3D->SetTransform(D3DTS_PROJECTION, &proj);
m_pDevice3D->SetRenderState(D3DRS_LIGHTING, true);
D3DLIGHT9 lamp;
lamp.Type = D3DLIGHT_DIRECTIONAL;
lamp.Position = D3DXVECTOR3(0.0f, 6.0f, 0.0f);
lamp.Direction = D3DXVECTOR3(1.0f, -1.0f, 0.0f);
D3DXCOLOR c = d3dColors::NightBlue;
lamp.Ambient = c * 0.4f;
lamp.Diffuse = c;
lamp.Specular = c * 0.6f;
m_pDevice3D->SetLight(0, &lamp);
m_pDevice3D->LightEnable(0, true);
lantern1->SetGlowingState(true, d3dColors::YellowLight, d3dColors::Green, m_pDevice3D);
lantern2->SetGlowingState(true, d3dColors::YellowLight, d3dColors::Green, m_pDevice3D);
lantern3->SetGlowingState(true, d3dColors::YellowLight, d3dColors::Green, m_pDevice3D);
}
sry iss ne menge code
nochmals vielen dank für eure hilfe