PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Transformation von uv-Space in xyz-Space


instinct
2009-12-28, 17:30:16
Ich möchte eine Textur (Verhältnis 2:1) auf eine Einheitskugel mappen. Das ist ja noch relativ einfach:

temp_point ist eine Struktur und enthält einen Punkt der Kugeloberfläche.

float azimuth = atanf(temp_point.x / temp_point.z);
float rho = acosf(temp_point.y);
u = azimuth / (2.0f * M_PI);
v = 1.0f - rho / M_PI;


Das Problem ist nun aber, dass ich auch den umgekehrten Weg gehen muss. Ich habe u und v gegeben und muss den Punkt im xyz Space dazu bestimmen, wenn die Textur auf die Kugel gemappt wurde.

Durch Umstellen der Ausgangsgleichungen komme ich auf y, aber nicht auf x und z. Denn: x := tanf(azimuth) * z

float azimuth = u * 2.0f * M_PI;
float rho = M_PI * (1.0f - v);
float y = cosf(rho);
float x = ?;
float z = ?:


Kann mir jemand bei diesem Problem weiterhelfen? Ich wäre sehr dankbar für ne Lösung.

Trap
2009-12-28, 22:47:02
Die Zwangsbedingung für die Oberfläche der Einheitskugel in 3d ist:
x*x+y*y+z*z=1

Damit hast du 3 Gleichungen und 3 Unbekannte.

instinct
2009-12-28, 23:50:30
Danke für den Tipp.
Nach Umstellen dieser Formal nach z und Einsetzen in 'x = tanf(azimuth) * z' erhalte ich folgendes:
t := tan²(azimuth)
x = sqrtf((t * (1.0f - y²)) / (1.0f + t))

Könnte das vielleicht kurz nochmal jemand nachrechnen und mir sagen, dass ich richtig liege? Wäre super.