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

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

11

24.10.2006, 18:06

Haben die Eckpunkte in D3DX Meshes keinen eigenen Platzt für Tangenten? Ich benutze keine, daher weiss ich es nicht.

Den MeshMender kannst Du übrigens nehmen, egal wie Dein eigenes in-memory Format aussieht und Dein Rendercode. Ich wandel mein in-memory Format in das von MM. um, lasse den laufen und wandele dann zurück.

Sei vorsichtig mit den Links von David_pb und insbesondere dem von Microsoft; Die scheinen (habs nur überflogen) weder auf die "handedness" (rechtshändig / linkshändig) noch darauf hinzuweissen, dass Du nach Berechnen des Tangentspaces u.U. mehr Eckpunkte als vorher hast. Daher auch das triviale Beispiel mit der texturierten (Erd) Kugel, da reicht ein Primitivalgorithmus natürlich aus. Als Einführung sind aber beide Links wahrscheinlich gut geeignet, solange man nicht davon ausgeht, dass die angegebenen Algorithmen/Formeln vollständig sind.
"Games are algorithmic entertainment."

Phili

unregistriert

12

24.10.2006, 18:16

@Osram
Ich hab in meinem eigenen Format halt nur die "rohen" Vertizes ohne viel drumherum, deswegen muss ich halt genau wissen, in welchem teil des FVF D3DX die Tangenten speichert...
Weil mein Format so "primitiv" ist(und da bin ich ganz froh drüber), kann ich nciht so einfach sachen übernehmen.

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

13

24.10.2006, 18:22

Dein eigenes Format (auf jeden Fall das "in memory Format", evtl auch das Dateiformat) musst Du aufbohren.


Ich erinnere mich gerade wieder, dass FVFs keine Tangenten (und Binormalen) vorsehen, sondern dass man das nur in Vertex Declarations angeben kann.
"Games are algorithmic entertainment."

Phili

unregistriert

14

24.10.2006, 18:24

@Osram
Das es kein vorhergesehenes Format für Tangenten gibt ist schon klar... Ist mir aber völlig egal, ich arbeite eh ausschließlich mit Shadern. Deswegen ist es ja gerade die Frage, WO D3DX die Tangentendinger hinmacht. z.B. eben die 2.TexCoords würden sich ja eignen...

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

15

24.10.2006, 18:38

http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c_dec_2004/directx/graphics/reference/d3dx/interfaces/id3dxmesh/GetDeclaration.asp
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c_dec_2004/directx/graphics/reference/d3dx/interfaces/id3dxmesh/GetVertexBuffer.asp
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c_dec_2004/directx/graphics/reference/d3dx/interfaces/id3dxmesh/GetNumVertices.asp

Ich habe es wie gesagt nie ausprobiert, bin aber vom folgenden Überzeugt und Du kannst das ja einfach überprüfen:
Nachg dem Aufruf von
D3DXComputeTangentFrame(Ex) hat das Mesh die Tangenten in dem Tangenten "slot". D.h. getFVF wirtd 0 liefern und GetDeclaration() wird Dir eine Declaration mit Tangenten liefern. Mit den drei oben gelinkten Befehlen kannst Du dann die Daten aus dem Mesh holen.
"Games are algorithmic entertainment."

Phili

unregistriert

16

24.10.2006, 18:52

@Osram
:cry:
Naja, ich werds mir mal anschauen...
ABer ich versteh erlcihgesagt nciht, wiso D3DX nciht einfac hdie 2.Texturcoordinaten(z.B.) nimmt. Ich mein, man kann mit den Tangenten ja eh nur dann was anfangen, wenn man Shader benutzt, und dann wird man sich eh auf diese Art darum herumschummeln, das eigentlich keine TangentenFVF vorgesehen sind...
Aber wie gesagt, ich werds mir mal anschauen.

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

17

24.10.2006, 19:35

Ähm - es gibt zwei Shader Semantiken TANGENT und BINORMAL.
Man muss also Tangenten NICHT als Texturkoordinaten an den Shader übergeben.
"Games are algorithmic entertainment."

Phili

unregistriert

18

24.10.2006, 19:47

@Osram
Umso besser, aber im Grunde ist das ja egal.

Phili

unregistriert

19

27.10.2006, 13:31

Ok, hab noch ein paar Fragen:

Quellcode

1
2
3
4
5
6
7
Vec1 = Vertex3 – Vertex2  
Vec2 = Vertex1 – Vertex2
DeltaU1 = Vertex3.u - Vertex2.u
DeltaU2 = Vertex1.u - Vertex2.u
DirectionV = |DeltaU2*Vec1-DeltaU1*Vec2|
DirectionU = |DirectionV x Vertex.N|     <-- Das muss doch bei verzerrten Texturen nicht immer der Fall sein
DirectionW = |DirectionU x DirectionV|   <-- Das ist doch immer Vertex.N

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

20

27.10.2006, 13:39

Zitat von »"Phili"«

Das muss doch bei verzerrten Texturen nicht immer der Fall sein


Ja

Zitat


Das ist doch immer Vertex.N


Nein, könnte auch -N sein. Diese kleine Tatsache macht den Code bestimmt ca 5 mal so komplex. Z.B. zwingt es Dich, entweder nur Modelle zuzulassen wo es eben doch immer +N ist oder aber Du musst Vertices splitten mit dem ganzen Rattenschwanz der damit zusammenhängt.
"Games are algorithmic entertainment."

Werbeanzeige