Graphikfehler bei Direct3D
-
Ich habe 3 Vierecke, die jeweils auf der x-y, x-z, y-z Ebene liegen. Die Vierecke sehen in etwa so aus:
_________ |\ |\ | | \ | \ | | \ | \ | |___\|___\| |\ |\ | | \ | \ | | \ | \ | |___\|___\|In der Mitte der Vierecke ist der Koordinaten Ursprung. Die Kamera schaut auf den Punkt (0;0;0) (Der Koordinatenursprung
) und befindet sich an der Position (0,0,-5). Wenn ich jetzt die Kamera um den Koordinatenursprung rotieren lasse, verdeckt er die x-y Ebene mit der y-z, und diese wieder mit der x-z Ebene mit der Fläche, die sich eigentlich hinter einem anderem Viereck befindet, und eigentlich gar nicht sichtbar sein dürfte. Also die y-z Ebene ist immer vollständig zu sehen.
Warum ist das so? Kann man das verhindern?
-
Was erzählst du hier unzusammenhängend von wird angeblich verdeckt? Was soll'n da verdeckt werden, ist doch nix da.
Die Chancen sind schlecht und die Situation aussichtslos!"
Kirk: "Das wird ein Spaß!
-
Z - Buffer vergessen? Muss ja wohl daran liegen ...
-
Z - Buffer vergessen? Muss ja wohl daran liegen ...
Ich hoffe, folgendes ist das, was du meinst...
Mein initialisierungscode sieht jetzt so aus:
D3DDISPLAYMODE d3ddm; D3DPRESENT_PARAMETERS d3dpp; if (!( lpD3D = Direct3DCreate9( D3D_SDK_VERSION ))) return FALSE; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; d3dpp.hDeviceWindow = GraphicWnd; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; if( FAILED( lpD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, CGraphicObject::GraphicWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &lpD3DDevice ))) { return FALSE; } lpD3DDevice->SetRenderState(D3DRS_AMBIENT,RGB(255,255,255)); lpD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE ); lpD3DDevice->SetRenderState( D3DRS_LIGHTING, FALSE ); lpD3DDevice->SetRenderState(D3DRS_ZENABLE,TRUE); lpD3DDevice->SetFVF(D3DFVF_KOORDVERTEX);Ich habe das jetzt hinzugefügt:
d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16;Jetzt ist das Problem, das er die einzelnen Dreiecke, oder was auch immer ich jetzt zeichne, er zeigt das nicht mehr vollständig an. Also er lässt überall irgendwelche Lücken... Ich versteh das einfach nicht!
Wie kann man machen, das er jetzt trotzdem vollständig zeichnet?Mfg;
-
Hat sich erledigt...
hablpD3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,32,64), 1.0f, 0 );statt
lpD3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,32,64), 1.0f, 0 );geschrieben.... Danke nochmal,
MFG;
-
clear vom zbuffer nicht vergessen