Toon posts:

[C++] DirectX Z-Buffer probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
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:
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:
Afbeeldingslocatie: http://users.pandora.be/novanet/pictures/zbuffer1.png

Afbeelding2:
Afbeeldingslocatie: http://users.pandora.be/novanet/pictures/zbuffer2.png

Afbeelding3:
Afbeeldingslocatie: http://users.pandora.be/novanet/pictures/zbuffer3.png

Verwijderd

Topicstarter
OMG dat is nu _typisch_ ik: ik zoek een dag nr de oplossing, start een topic en 5 minuten erna vind ik de oplossing :x

C++:
1
2
3
    // clear the viewport color
    result = d3dDevicePtr->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0,0,0,0), 1.0f, 0);
    assert(result == D3D_OK);


Dit moest er dus bij staan: D3DCLEAR_ZBUFFER
(stond er eerst dus niet);

Topic mag geclosed worden!

[ Voor 5% gewijzigd door Verwijderd op 04-12-2004 11:55 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Sluiten hoeft niet als je de oplossing zelf vindt hoor, dan hebben anderen er later meer aan :)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein