Ik ben voor het eerst met DirectX bezig en heb een probleempje met de Z-Buffer.
De parameters die ik gebruik bij het maken van m'n device:
Als ik parameters.EnableAutoDepthStencil op FALSE zet, dan krijg je het resultaat dat je in afbeelding 1 en 2 ziet. Het schip ziet er eerst normaal uit, maar als je het verplaatst klopt de Z-buffering niet meer.
Zet ik het op TRUE, dan krijg je het resultaat van afbeelding3...
(op m'n desktop iig, want op m'n laptop zie je dan nog veel minder en enkel witte artifacts).
Is er iemand die weet hoe dit komt? 'k Heb me al suf gezocht en gegoogled, vergeleken met andere init code etc, maar kan het niet vinden
Afbeelding1:

Afbeelding2:

Afbeelding3:
De parameters die ik gebruik bij het maken van m'n device:
C++:
1
2
3
4
5
| // use desktop color format parameters.BackBufferFormat = D3DFMT_UNKNOWN; parameters.EnableAutoDepthStencil = TRUE; parameters.AutoDepthStencilFormat = D3DFMT_D16; //D3DFMT_D24X8, D3DFMT_D32, D3DFMT_D16 |
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| void CGfx::SetDeviceProperties() { d3dDevicePtr->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); d3dDevicePtr->SetRenderState(D3DRS_SPECULARENABLE, TRUE); //d3dDevicePtr->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(100, 100, 100)); d3dDevicePtr->SetRenderState(D3DRS_LIGHTING, TRUE); d3dDevicePtr->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); d3dDevicePtr->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); d3dDevicePtr->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); d3dDevicePtr->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); d3dDevicePtr->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); // set the projection matrix D3DXMATRIXA16 matrix; D3DXMatrixPerspectiveFovLH(&matrix, (3.14159265f / 180.0f) * 60, 800.0f/600.0f, 0.13f, 8192.0f); d3dDevicePtr->SetTransform(D3DTS_PROJECTION, &matrix); } void CGfx::SetLighting() { D3DLIGHT9 d; D3DXCOLOR white = D3DCOLOR_XRGB(255, 255, 255); D3DXCOLOR grey = D3DCOLOR_XRGB(155, 155, 155); ::ZeroMemory(&d, sizeof(d)); d.Type = D3DLIGHT_DIRECTIONAL; d.Diffuse = white; d.Specular = white * 0.3f; d.Ambient = grey * 0.2f; d.Direction = D3DXVECTOR3(1.0f, 0.0f, 0.0f); d3dDevicePtr->SetLight(0, &d); d3dDevicePtr->LightEnable(0, true); d3dDevicePtr->SetRenderState(D3DRS_NORMALIZENORMALS, true); d3dDevicePtr->SetRenderState(D3DRS_SPECULARENABLE, true); } |
Als ik parameters.EnableAutoDepthStencil op FALSE zet, dan krijg je het resultaat dat je in afbeelding 1 en 2 ziet. Het schip ziet er eerst normaal uit, maar als je het verplaatst klopt de Z-buffering niet meer.
Zet ik het op TRUE, dan krijg je het resultaat van afbeelding3...
(op m'n desktop iig, want op m'n laptop zie je dan nog veel minder en enkel witte artifacts).
Is er iemand die weet hoe dit komt? 'k Heb me al suf gezocht en gegoogled, vergeleken met andere init code etc, maar kan het niet vinden
Afbeelding1:

Afbeelding2:

Afbeelding3: