Seltsame Verzerrung
-
naja, in der d3d doku steht wie man das macht
start -> systemsteuerung -> directX
dort dann auf debug stellen.
-
naja, in der d3d doku steht wie man das macht
start -> systemsteuerung -> directX
dort dann auf debug stellen.Ja habs umgestellt...
Als Resultat wird jetzt gar nichts mehr angezeigt...
Also die Textur links oben schon aber kein einziger Würfel...
Was bringt das nun?BTW: Was ist der Unterschied zwischen Retail und Debug? Doch wohl nicht dass es beim Einen funktioniert aber beim Anderen nicht, oder?
-
Das zeigt dir ueber die Debugausgaben, was genau dein Fehler ist. Das brauchst du also nur noch lesen und beheben. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
Sorry aber mit der Antwort kann ich genau nichts anfangen.
Wieso funktioniert das bei Debug nicht, aber bei Retail schon bzw. was kann da der Fehler sein...
wenn ich mit dem Debugger durchlaufe, sehe ich dass die Werte alle richtig zugewisen werden...
Was aber der Fehler ist kann ich so nicht erkennen...
-
-
Hi,
die falschen Dreiecke entstehen wenn falsche Daten an die Grafikkarte geliefert werden. Folgende Möglichkeiten:
- falsches FVF
- mehr Daten in VB geschrieben als dort Platz ist
- weniger Daten im VB als beim Render-Aufruf angegeben
- ...-> Wenn man auf die Debug Libs schaltet sieht man i.d.R. in Visual Studio Output Fenster etliche Meldungen von D3D, kann man gar nicht übersehen. Dass er im DebugModus nicht rendert heisst, dass er dann durch mehr Fehlerprüfungen selbst erkennt dass etwas an deinen Daten faul ist und sie dann gar nicht erst rendert. Dann wird er aber im Output sagen was falsch ist.
Allerdings kommt es auch vor, dass die Debug-Ausgaben nicht dargestellt werden. Bei mir ist das so weil ich Vista 64 Bit habe aber eine 32 Bit Applikation erzeuge. In dem Fall hilft nur deinen Datenerzeugungscode und den Rendercode noch mal genaustens durch zu gehen und den Fehler dadurch zu finden.
Ciao,
Stefan
-
Danke für die Hinweise!
Ich bekomm bei jedem Aufruf von Draw bei Cube diese Meldungen:
Direct3D9: (ERROR) :Stream 0 does not have required number of vertices
Eine Ausnahme (erste Chance) bei 0x7674b09e in TurretX.exe: Microsoft C++-Ausnahme: long an Speicherposition 0x0012f978..
Direct3D9: (ERROR) :DrawPrimitive failed.Also betreffen die diesen Teil des Codes:
Cube::Cube(LPDIRECT3DDEVICE9 dev,D3DXVECTOR3 Position, D3DXVECTOR3 Size, DWORD Color):MY3DObject(dev,Position,Size,Color){ CUSTOMVERTEX cbuf[]={ { Position.x- Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 0, 1}, // Vorne { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 0, 0}, { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 1, 0}, { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 1, 0}, { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 1, 1}, { Position.x- Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 0, 1}, { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 0, 1}, // Hinten { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 0, 0}, { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 1, 0}, { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 1, 0}, { Position.x- Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 1, 1}, { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 0, 1}, { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,0,255), 0, 1}, // Oben { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,0,255), 0, 0}, { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,0,255), 1, 0}, { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,0,255), 1, 0}, { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,0,255), 1, 1}, { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,0,255), 0, 1}, { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 0, 1}, // Unten { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(255,0,0), 0, 0}, { Position.x- Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(255,0,0), 1, 0}, { Position.x- Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(255,0,0), 1, 0}, { Position.x- Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 1, 1}, { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(255,0,0), 0, 1}, { Position.x- Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 0, 1}, // Links { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 0, 0}, { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,255,0), 1, 0}, { Position.x- Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,255,0), 1, 0}, { Position.x- Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,255,0), 1, 1}, { Position.x- Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,255,0), 0, 1}, { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,0,255), 0, 1}, // Rechts { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,0,255), 0, 0}, { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,0,255), 1, 0}, { Position.x+ Size.x/2, Position.y+ Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,0,255), 1, 0}, { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z+ Size.z/2, D3DCOLOR_XRGB(0,0,255), 1, 1}, { Position.x+ Size.x/2, Position.y- Size.y/2, Position.z- Size.z/2, D3DCOLOR_XRGB(0,0,255), 0, 1}, }; //Hier werden die Punkte für den Würfel bestimmt Device=dev; BYTE* VertexBufferStart; Device->CreateVertexBuffer(sizeof(cbuf), D3DUSAGE_WRITEONLY, D3D_CUSTOMVERTEX, D3DPOOL_MANAGED, &VB, NULL); VB->Lock(0,0,(void**)&VertexBufferStart,0); memcpy(VertexBufferStart,cbuf,sizeof(cbuf)); VB->Unlock(); Device->SetFVF(D3D_CUSTOMVERTEX); } void Cube::setColor(DWORD Color,int Side){ this->Color=Color; } void Cube::setSize(D3DXVECTOR3 Size){ this->Size=Size; } void Cube::Draw(){ Device->SetStreamSource(0,VB,0,sizeof(CUSTOMVERTEX)); Device->DrawPrimitive(D3DPT_TRIANGLELIST,0,36); }Ich übergebe doch 6x6=36 Vertices und gebe auch an er soll bei 0 anfangen und dass es 36 sind....mh...

-
Vielleicht solltest du statt irgendwelcher Daten zu uebergeben erstmal die Doku von DrawPrimitive lesen:
"PrimitiveCount
[in] Number of primitives to render. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the D3DCAPS9 structure. PrimitiveCount is the number of primitives as determined by the primitive type. If it is a line list, each primitive has two vertices. If it is a triangle list, each primitive has three vertices."Hab dir ja gleich gesagt, das du da was falsch machst. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
Achja...

Danke!
sind also 12 und nicht 36...
-
np, Hauptsache du weisst, wo du beim naechsten Mal nachschauen musst. f'`8k
Gruß, TGGC (making great games since 1992)