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

1

12.01.2012, 02:31

Wavefront Texturkoordinaten

Hi Leute,
mich quält mal wieder ein Problem. Ich habe Schwierigkeiten ein Mesh aus einer Wavefrontdatei mit Texturkoordinaten zu rendern.
Als Versuchskaninchen nehme ich eine simple Fläche (4Vertices). Die Indexdaten sehen wie folgt aus:

C-/C++-Quelltext

1
2
f 1/1 4/2 3/3
f 1/1 3/3 2/4

Da ich die Funktion DrawIndexed() zum rendern verwende werden die Vertices also in dieser Reihenfolge gerendert: 1,4,3, 1,3,2. Natürlich geht das mit den Texturkoordinaten dann nicht mehr auf, da diese eine andere Reihenfolge benötigen.

Jetzt kommt meine Frage: Muss ich jetzt einen zweiten Vertexbuffer erstellen um das Problem mit den Texturkoordinaten zu umgehen?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

12.01.2012, 09:44

Wieso benötigen die Texturkoordinaten eine andere Reihenfolge?
@D13_Dreinig

3

12.01.2012, 10:18

Naja, in Obj Dateien halt man halt getrennte Indexe für Vertexpositionen und Texturkoordinaten. Ich weiß grad nicht, ob sowas auch in DirectX möglich ist, aber du könntest auf jeden Fall vor dem Rendern die Vertexe so zusammenkopieren, dass du mit einem Indexbuffer auskommst. Noch einfach ist es vermutlich, gar keinen Indexbuffer zu benutzen, sondern die Vertexe so hintereinander zu kopierne, wie es die unterschiedlichen Wavefront Indexe angeben.
Lieber dumm fragen, als dumm bleiben!

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

4

12.01.2012, 10:48

Du kannst natürlich für jedes Attribut (Position., Normale, Texturkoordinate) einen eigenen Buffer/Stream erstellen, wäre problemlos möglich.

Ich machs in meinem Loader so dass ich einfach wenn ich die Faces durchgehe meinen Vertex nv konstruiere:

Pseudocode:

Quellcode

1
2
3
4
Vertex nv;
nv.Position = Positions[currentFace.PositionIndex];
nv.Normal = Normalss[currentFace.NormalIndex];
nv.UV = UVs[currentFace.UVIndex];


Und ihn wenn er noch nicht vorhanden ist in meine finale Vertexliste einfüge:

Pseudocode:

Quellcode

1
2
if (!Vertices.Any(v => v.Equals(nv)))
  Vertices.Add(nv);


Klappt problemlos.

Werbeanzeige