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

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

1

23.06.2011, 19:29

Tangentspace -Tangente Berechnen

Hi Leute habe ja die letzte Zeit mit Bumpmapping rumgespielt und habe das ganze nun mal in groß getestet.
Aber irgendwie stimmt das Ergebniss noch nich so ganz.

Ich habe die Vermutung das es an den Tangenten liegt und möchte hier mal jemanden darum bitten mir für folgendes Dreieck die Tangente und Binormale zu berechnen damit ich mal was zum vergleichen habe.

Die Daten für das Dreieck lauten:
x y z u v
Vertex1 -1.0 1.0 0.0 0.0 0.0
Vertex2 -1.0 -1.0 0.0 0.0 1.0
Vertex3 1.0 1.0 0.0 1.0 0.0
Normale 0.0 0.0 1.0

Ich bekomme bei meiner Berechnung nur Krumme Werte raus und kann mir nicht vorstellen wohin die Tangente Zeigen muss.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

23.06.2011, 19:57

Naja, das müssten ja mehr oder weniger offensichtlich sein:
Tangente = (1, 0, 0)
Binormale = (0, -1, 0)

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

3

23.06.2011, 21:51

Ok, das Hilft mir schonmal den Fehler einzugrenzen... Danke

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

23.06.2011, 21:53

Was is denn das Problem? Vielleicht kann man ja mehr helfen als einfach nur Testwerte beizusteuern ;)

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

5

23.06.2011, 22:10

Das Poblem ist das beim Bumpmapping die Lichtrichtung nicht immer korrekt ist.
Mal stimt sie mal nicht. Habe das Ganze an einer Kugel getestet.
Ich denke das die Tangenten schuld sind.
Ich habe mich jetz nach der Lösung bei msdn gerichtet und habe für die Tangente
0,0 -1.0 0.0 rausbekommen. Also genau das was in der Binormalen stehen müsste.
Können die oberen Werte auch vertauscht sein?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

23.06.2011, 22:19

Kanns sein dass du einfach die Formeln für Tangente und Bitangente vertauscht hast? Zeig eben mal was für Formeln du da verwendest...

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

7

23.06.2011, 22:28

So Sieht der Code bisher aus

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Vector3f _v1 = new Vector3f(vertices[(int)TrinagleIndex[0]]);
Vector3f _v2 = new Vector3f(vertices[(int)TrinagleIndex[3]]);
Vector3f _v3 = new Vector3f(vertices[(int)TrinagleIndex[6]]);
Vector3f _normale = new Vector3f(normals[(int)TrinagleIndex[2]]);

Vector2f uv1 = new Vector2f(texturcoords[(int)TrinagleIndex[1]]);
Vector2f uv2 = new Vector2f(texturcoords[(int)TrinagleIndex[4]]);
Vector2f uv3 = new Vector2f(texturcoords[(int)TrinagleIndex[7]]);

float _uv32 = uv3.x - uv2.x;
float _uv12 = uv1.x - uv2.x;

Vector3f _v32 = new Vector3f(_v3 - _v2);
Vector3f _v12 = new Vector3f(_v1 - _v2);

Vector3f _tangent = new Vector3f(_v32 * _uv12 - _v12 * _uv32);                                          
_tangent.Normalize();

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

23.06.2011, 23:19

Also deine etwas unkonventionellen Indices verwirren mich ein wenig, aber ich hab das Gefühl dass da irgendwas verdreht ist. Schau vielleicht einfach mal hier vorbei.

EDIT: Ok ich glaub das was du da hast sollte wirklich die Bitangente sein und nicht die Tangente.

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

9

24.06.2011, 18:49

:D ICH HABE FERTIG

Das erste Problem war das ich auf die falschen Geometriedaten zugegriffen habe und dadurch die Flächen verkehrt waren.(Die erste war aber richtig)
Und der 2. Fehler war das ich den Lichtwecktor nicht mit der TBN _Matrix multipliziert habe.

Aber nun klappts. Habe es schon an einer Kugel getestet.

Wie stelle ich es an das der verlauf fließend wird?
Bei Normalen kann von ich ja alle an einem Punkt liegenden Flächen die Normale nehmen und mir den Durchschnitt errechnen.
Geht das mit der Tangente auch oder kommt dann murx raus?

Beispiel is ne Kugel

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

24.06.2011, 18:56

Ja kannst du mitteln. Du musst nur beachten dass die Basisvektoren die da rauskommen nichtmehr notwendigerweise orthogonal sein werden. Aber gut, der Tangentspace ist ja sowieso nicht notwendigerweise orthogonal. Ob das ein Problem ist oder nicht hängt davon ab was genau du damit anstellen willst. Meistens ist er zumindest annähernd orthogonal, sodass man sich z.B. mit Gram-Schmidt-Orthonormalisierung helfen kann ohne dabei einen großen Fehler zu machen.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (24.06.2011, 19:02)


Werbeanzeige