Seite 1 von 1

[Assimp] Richtung der Bitangenten

Verfasst: 04.03.2012, 20:15
von CodingCat
Ich habe den ganzen Tag damit zugebracht, Tangenten und Bitangenten in meinem Shader zu rekonstruieren. Schlussendlich komme ich jedoch nie um eine Negierung der Bitangenten herum. Ist es gewollt / bekannt, dass die Bitangenten nach dem Assimp-Import stets entgegen der V-Texturrichtung zeigen, oder mache ich was falsch?

Ich nutze aiProcess_ConvertToLeftHanded. Ich habe auch mal über den Source geschaut, und prinzipiell scheint alles Notwendige vorgenommen zu werden. In FlipUVs werden die V-Koordinaten geflippt, in MakeLeftHanded die Bitangenten. (Warum eigentlich, sollte das nicht zu den UV-Koordinaten? Sollte MakeLeftHanded tatsächlich mal isoliert eingesetzt werden, zeigen die Bitangenten doch erst Recht in die falsche Richtung?)

Momentan zeigen meine Tangenten in U-Richtung und meine Bitangenten entgegen der V-Richtung. :(

Re: [Assimp] Richtung der Bitangenten

Verfasst: 05.03.2012, 13:49
von Schrompf
Tja... ich hab mich ehrlich gesagt seit Jahren mit diesem Thema nicht mehr beschäftigt. Ich müsste das Projekt mal "vanilla" benutzen - ohne die zweihundert Framework-Stufen zwischendurch.

Re: [Assimp] Richtung der Bitangenten

Verfasst: 19.04.2012, 03:30
von Aramis

Re: [Assimp] Richtung der Bitangenten

Verfasst: 19.04.2012, 09:29
von Schrompf
Hm.... verstehe ich das richtig?

Right Handed Coordinate System:
- Tangenten sind korrekt
- Bitangenten sind invertiert

Left Handed Coordinate System:
- Tangenten sind korrekt
- Bitangenten sind aus Versehen korrekt, weil wir vergessen haben, mit dem Flippen der UV-Channels auch die Bitangenten umzudrehen?

Warum ist das bisher niemandem aufgefallen? Oder wurschteln die alle genauso wie ich nur mit den Minuszeichen rum, bis das Ergebnis stimmt? :?

Re: [Assimp] Richtung der Bitangenten

Verfasst: 19.04.2012, 11:02
von CodingCat
Nein, siehe Eingangspost. Die Konvertierung Left <-> Right stimmt prinzipiell, auch wenn sie etwas seltsam über die verschiedenen Schritte verteilt ist (ebenfalls siehe oben). Die Bitangenten sind auch bei mir im Left-Handed System falsch, und somit wohl konsequent immer falsch. ;)

Re: [Assimp] Richtung der Bitangenten

Verfasst: 19.04.2012, 11:11
von CodingCat

Code: Alles auswählen

// mirror bitangents as well as they're derived from the texture coords
if( pMesh->HasTangentsAndBitangents())
{
	for( unsigned int a = 0; a < pMesh->mNumVertices; a++)
		pMesh->mBitangents[a] *= -1.0f;
}
Dieser Schritt aus MakeLeftHandedProcess sollte wohl in FlipUVsProcess, damit die beiden Schritte auch isoliert korrekt arbeiten.

Unabhängig davon sind die Bitangenten aber im Right- wie Left-Handed Coordinate System stets invertiert, was dann eigentlich nur noch an der grundsätzlichen Berechnung des Tangent Frames liegen kann.