Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DigitalDream

Frischling

  • »DigitalDream« ist der Autor dieses Themas

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

1

29.11.2006, 09:46

DrawIndexedPrimitive Problem

Hi,

ich versuche ein Objekt zu zeichnen über DrawIndexedPrimitive.
Dies wird mit einem INVALID_CALL bestraft.

Ich rufe nach VB.Update() und IB.Update()

SetStreamSource(0, vBuffer.GetVB(), 0, sizeof(SVertex));
S_OK
SetIndices(indexBuffer.GetIB());
S_OK

DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 1, 1, verticesCount, 1, verticesCount);

INVALID_CALL

Wie müsste DrawIndexedPrimitive denn genau aussehen,wenn ich alles aus dem Buffer zeichnen will?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

29.11.2006, 10:39

ein blick in die doku oder zumindest auf die namen der parameter könnte helfen...

ich tippe mal drauf, dass überall wo ein 1er steht ein 0er hin sollte, und beim letzten anstatt verticesCount die anzahl der dreiecke...

DigitalDream

Frischling

  • »DigitalDream« ist der Autor dieses Themas

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

3

29.11.2006, 11:12

Hi dot,

das habe ich schon alles durch.
Mit dem letzten Parameter hast du Recht,da habe ich mich verschrieben.
Das darf natürlich nicht vert count sein sondern die Anzahl der Primitiven.

Ich hoffe aber doch noch,dass es wirklich an falschen Parametern liegt,und nicht an internen Zugriffen auf vorangegangene Einstellungen beim device.
Sonst muss ich wohl DX debuggen,bei den super detailierten Fehlermeldungen. ^^

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

29.11.2006, 11:13

es liegt ziemlich sicher daran, dass BaseVertexIndex, StartIndex und MinIndex in wirklichkeit nicht alle 1 sind...außer du hast da wirklich exotische daten in deinen buffern. wenn ja, dann bitte ich um aufklärung was sich da drin befindet ;)

oder verzichtet dein modell wirklich auf die ersten 2 vertices (lol!?) im buffer und startet erst beim 2ten index!?

du solltest dir mal durchlesen was GENAU diese parameter machen...wenn nur einer davon nicht 100%ig stimmt -> INVALID_CALL

Zitat von »"dx doku"«

BaseVertexIndex
[in] Offset from the start of the vertex buffer to the first vertex.

MinIndex
[in] Minimum vertex index for vertices used during this call. This is a zero based index relative to BaseVertexIndex.

StartIndex
[in] Index of the first index to use when accesssing the vertex buffer. Beginning at StartIndex to index vertices from the vertex buffer.

DigitalDream

Frischling

  • »DigitalDream« ist der Autor dieses Themas

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

5

29.11.2006, 11:32

Ich hatte sie vorher schon auf 0.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

29.11.2006, 11:34

wenn du alle auf 0 setzt heißt das noch lang nicht dass das stimmen muss.

vielleicht verrätst du uns endlich was in den buffern ist.
sonst kann man dir nicht helfen...

außerdem sollte die debug runtime eigentlich mehr verraten als nur INVALID_CALL oder!?

DigitalDream

Frischling

  • »DigitalDream« ist der Autor dieses Themas

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

7

29.11.2006, 11:47

Kommt drauf an welches Modell ich gerade lade.

Aber anhand eines Beispiels würden im Vertexbuffer 2828 Vertizen
stecken und im Indexbuffer 4096 Indizes.

Eine Vertex besteht aus einem 3D vektor und einem 2D vektor.
Ein Index besteht aus 3 int werten.

Das mit dem debug check ich gerade.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

29.11.2006, 11:50

4096 mod 3 = 1 -> mit D3DPT_TRIANGLELIST wirds schonmal schwer gehen.

Zitat

Ein Index besteht aus 3 int werten.


wie ist das zu verstehen?

DigitalDream

Frischling

  • »DigitalDream« ist der Autor dieses Themas

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

9

29.11.2006, 11:52

hmm,ich habe nur die Face (Dreiecks) koordinaten also a,b und c in einem Indexbuffer abgelegt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

29.11.2006, 11:55

die anzahl der indices muss logischerweise durch 3 teilbar sein damit trianglelist funzt, evtl. liegt da der hund begraben...

übergibst du als PrimitiveCount die anzahl der dreiecke oder der indices?

Werbeanzeige