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

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

1

16.05.2005, 18:10

Problem bei der Umsetzung von Flexible Vertex Formats

Hallo :) :) :)


Es geht um die Kapselung von FVFs.

Ich arbeite grad dran Benutzerfreundl. Klassen für Vertex- u. IndexBuffers zu schreiben und beschloss eigene Konstanten für Formate und structs für Vertexe einzuführen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
struct sgSVertex{};

struct sgSVertexTranslation: public sgSVertex
{
  D3DVECTOR VectorTranslation;
};

struct sgSVertexColorDiffuse: public sgSVertex
{
  D3DCOLOR ColorDiffuse;
};


(und so weiter)

Die Idee war dass der VertexKlasse Konstanten übergeben werden die die Zusammensetzung des Vertexformats beschreiben. Dann weiß die Klasse, wie sie die Daten interpretieren soll, so in der Art (vereinfacht):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef unsigned int sgTVertexFormat;

const sgTVertexFormat SG_VERTEXFORMAT_VECTOR_TRANSLATION=D3DFVF_XYZ;
const sgTVertexFormat SG_VERTEXFORMAT_VECTOR_NORMAL=D3DFVF_NORMAL;

//usw.


class sgCVertexBuffer
{
  public:
    sgCVertexBuffer(
      sgCDirect3D* pDirect3D,
      const sgTVertexFormat VertexFormat,
      sgSVertex aVertex[],
      const unsigned int uiCountVertex
      //noch n paar parameter

    };
};



wenn der User nen VertexBuffer erzeugen will sagt der einfach ZACK:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct SUserVertex: public sgSVertexTranslation //u.s.w.

{
};

SUserVertex aVertices[]={//Zeugs};


sgCVertexBuffer* pVertexBuffer=
  new sgCVertexBuffer(
    pDirect3D,
    SG_VERTEXFORMAT_VECTOR_TRANSLATION,
    aVertices,
    10123784ßß578971^0737846,
    //noch n paar parameter

);




Das problem: Wenn ich meine vordefinierten Vertexe beerbe, müssen deren Members in korrekten Reihenfolgen sein (also erst die Position (bei mir Translation genannt), dann die DiffuseColor...). Scheitert meine Modellierung da dran? kennt ihr bessere Kapselungen für FVFs?
Quak

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

16.05.2005, 18:48

Re: Problem bei der Umsetzung von Flexible Vertex Formats

Zitat von »"Samuel G."«

Das problem: Wenn ich meine vordefinierten Vertexe beerbe, müssen deren Members in korrekten Reihenfolgen sein (also erst die Position (bei mir Translation genannt), dann die DiffuseColor...). Scheitert meine Modellierung da dran?

Ja, daran kann es scheitern. Denn ich glaube nicht, dass der Compiler vorgeschrieben bekommt, in welcher Reihenfolge er die Member der vererbten Klasse und die Member der erbenden Klasse im Speicher anordnen muss.

Zitat von »"Samuel G."«

kennt ihr bessere Kapselungen für FVFs?

Du musst nicht unbedingt mit FVFs arbeiten. Direct3D erlaubt es Dir, die Daten so anzuordnen, wie Du es gerne willst.
Stichwort: "Vertex Declaration", schau in der Dokumentation nach.
Du kannst genau festlegen, aus welchen Elementen der Vertex-Buffer besteht, wie sie angeordnet sind, wie groß sie sind (z.B. 1 bis 4 Elemente), welcher Typ (float, int) und wozu sie verwendet werden sollen (Texturkoordinaten, Position, Normalenvektor, Tangentenvektor, Binormalenvektor, Streufarbe, Glanzfarbe etc.).

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

3

16.05.2005, 19:34

Beitrag

Danke für diese schnelle und äußerst taugliche Antwort!
8) 8) 8)

Ich werd mal unter Vertex Declaration recherchieren...


Samuel G.
Quak

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

4

18.05.2005, 20:38

Beitrag

Nun ja, Ich hab in der DirectX sdk nachgeschlagen, aber nur die Erklärung der struktur D3DVERTEXELEMENT9 gefunden, nicht aber die prinzipielle Vorgehensweise (vielleicht liegts auch meinen mieserablen Englischkenntnissen). :( :(

Nun, weiß jemand ein (gutes) Tutorial für die frei programmierbaren Vertices, das die praktische Vorgehensweise aus der Sicht des Programmierers klar macht? (vielleicht hat jemand schon mal so was implementiert und kann mir weiterhelfen)

Andere Frage: Wenn ich das so mache, wie David gesagt hat, geht das dann nur auf GraphikKarten die VertexShader unterstützen?! ??? ??? ???
Quak

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

18.05.2005, 21:23

Schau dir mal das Vertex-shader Sample an. Da wird das auch eingeführt.

Werbeanzeige