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

Atlan

Frischling

  • »Atlan« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Deutschland, NRW

Beruf: Azubi

  • Private Nachricht senden

1

03.06.2005, 18:04

Verticien aus einem VB auslesen

Hallo Zusammen!

Mal ne ganz simple Frage ;)

Ich habe eine tbModell-Datei geladen. Nun mochte ich die Position aller Verticien in einem tbVector3-Array speichern. Ich kriege es net hin :(

Kann mir jemand helfen?

mfg
Atlan

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

03.06.2005, 18:14

Was bekommst du nicht hin? Codausschnitt? Fehlermeldungen?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Atlan

Frischling

  • »Atlan« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Deutschland, NRW

Beruf: Azubi

  • Private Nachricht senden

3

04.06.2005, 12:51

Hmm...mich verwirren diese komischen void* immer. Ich habe ja ein Vertex in dem z.B. die Position und Farbe gespeichert ist. Mir reicht aber die Position des Vertex. Weiter komm ich nicht :(

mfg
Atlan

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

04.06.2005, 15:10

void* deswegen, weil ja vorher das tatsächliche Format nicht bekannt ist, deshalb muss ja auch die Größe der Vertex-Struktur mit angegeben werden.
Aber das sollte doch kein Problem sein? Im Gegenteil, da ja für void* jedes Format eingesetzt werden kann (nehmt mich jetzt bitte nicht auseinander; ich weiss, dass das teilweise nicht ganz so problemlos sein muss ;) )...

Atlan

Frischling

  • »Atlan« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Deutschland, NRW

Beruf: Azubi

  • Private Nachricht senden

5

05.06.2005, 15:25

Ok, dann mal folgendes:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tbVector3* GetVPos(tbVertexBuffer* vb)
{
   void* pVertex;
   // Ich kenne die genauen Funktionsnamen nicht auswendig...

   tbVector3* pVPos = new tbVector3[vb->GetMaxVerticien()];
   for(int i = 0; i<vb->GetMaxVerticien(); i++)
   {
      vb->GetVertex(i, &pVertex);
      // Hier das Problem! Wie bekomme ich aus der 

      // Struktur eines Vertex nur die Position?

      pVPos[i] = ???;
   }
   // ...

   return pVPos;
}


Der Code ist zwar nicht besonders schön ;), zeigt dafür aber mein Problem...

mfg
Atlan

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

05.06.2005, 17:22

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tbVector3* GetVPos(tbVertexBuffer* vb)
{
   void* pVertex;
   // Ich kenne die genauen Funktionsnamen nicht auswendig...

   tbVector3* pVPos = new tbVector3[vb->GetMaxVerticien()];
   for(int i = 0; i<vb->GetMaxVerticien(); i++)
   {
      vb->GetVertex(i, &pVertex);
      // Hier das Problem! Wie bekomme ich aus der 

      // Struktur eines Vertex nur die Position?

      pVPos[i] = *((tbVector3*)(pVertex));
   }
   // ...

   return pVPos;
}


Das geht, da die Position immer am Anfang steht (normalerweise zumindest). Allerdings hast Du da noch einen Fehler drin, denn GetVertex erwartet als zweiten Parameter keinen void**, sondern einen void*-Zeiger auf einen Speicherbereich, wo der Vertex reinkopiert werden soll.
Also müsste es ungefähr so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tbVector3* GetVPos(tbVertexBuffer* vb)
{
   char* pTemp = new char[vb->GetVertexSize()];
   tbVector3* pVPos = new tbVector3[vb->GetMaxVertices()];

   for(int i = 0; i < vb->GetMaxVertices(); i++)
   {
      vb->GetVertex(i, pTemp);
      pVPos[i] = *((tbVector3*)(pTemp));
   }

   delete[] pTemp;
   return pVPos;
}


Und noch was:
Den Begriff "Verticien" gibt es nicht. Entweder heißt es "Vertizes" oder "Vertices", aber nicht "Verticien". Und demnach gibt es auch "tbVertexBuffer::GetMaxVerticien" nicht.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

05.06.2005, 17:50

Zu dem Thema wo es steht -> Vertex Decl. Macht vieles leichter :)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Atlan

Frischling

  • »Atlan« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Deutschland, NRW

Beruf: Azubi

  • Private Nachricht senden

8

15.06.2005, 20:17

@ David Scherfgen

Danke für die Ausführliche Erklärung! :) Ich hab's jetzt endlich geschafft...

Werbeanzeige