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

21

18.10.2009, 10:14

@Black Snake: Danke, werd ich gleich mal Probieren, will aber trozdem mal die ******* Tangente da im Code berechnet bekommen.

@all:
Mein Nächster Ansatz:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tbVector3 v0 (v[i*3+0].Position);
            tbVector3 v1 (v[i*3+1].Position);
            tbVector3 v2 (v[i*3+2].Position);

            // DeltaA und DeltaB berechnen

            tbVector3 Deltav2v1 (v1 - v0);
            tbVector3 Deltav3v1 (v2 - v0);

            //

            tbVector2 Deltac2c1 = v[i*3+1].Texture - v[i*3+0].Texture;
            tbVector2 Deltac3c1 = v[i*3+2].Texture - v[i*3+0].Texture;

            // Vektoren berechnen

            tbVector3 Tangent (0.0f);

            Tangent = tbVector3 ((Deltav2v1 * Deltac2c1.y - Deltav3v1 * Deltac2c1.y)  /  (Deltac2c1.x * Deltac3c1.y - Deltac3c1.x * Deltac2c1.y));


Stimmt die Berechnung jetzt so ?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

22

18.10.2009, 11:21

Der Code ist ja leider unvollständig, daher bezieh ich mich mal auf den Teil den du gepostet hast:

C-/C++-Quelltext

1
(Deltav2v1 * Deltac2c1.y - Deltav3v1 * Deltac2c1.y)


Hier stimmt der erste Faktor nicht, das sollte Deltac2c1.x sein. Ansonsten sieht's auf den ersten Blick ok aus. Allerdings musst du ggf noch weitere Fälle berücksichtigen (Division durch 0, ...).

Im zweiten Schritt musst du die Basisvektoren pro Vertex (nicht pro Face, wie es bislang der Fall ist) finden. D.h. du gehst durch alle Vertices und schaust welche Dreiecke sich diesen Vertex teilen richtest die Vektoren entsprechend aus.

Im letzten Schritt kannst du, falls du Ortnonormalbasen willst, die Basen pro Vertex orthonormalisieren (z.B. Gram-Schmidt).

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

23

18.10.2009, 12:56

die shader variante läuft allerdings erst problemlos ab version 2.x (version 2.0 geht nicht), wegen den beiden funktionen "ddx" und "ddy" ;)

Werbeanzeige