ich schreib grad wieder ein PlugIn für Maya und stehe dabei grad vor einem kleinen problem....
ich habe ein Objekt welches ich auf der KameraPlane dorthin verschieben will wo die maus gerade ist...
Es gibt schon eine vorgefertigte Funtkion um die 2D-MausKoordinaten in 3D Koordinaten umzuwandeln.. allerdings gibt mir diese nur einen punkt auf der nearClippingPlane und einen auf der farClippingPlane zurück.
Von der Camera hab ich alle möglichen daten.. vorgestellt hatte ich mir das ganze in etwa so:
1. 2D koodinaten -> 3D koodinaten umwandeln
2. aus dem up und right-Vector der camera eine ebene in dem Objekt das bewegt werden soll erstellen.
3. gucken wo die ebene die linie meines near/far-clipping plane punktes schneidet
4. das objekt an den schnittpunkt bewegen.
Stimmt das von der theorie her??? und kann mir irgendwer sagen wie ich da was rechnen muß...? ich hab da garkeine ahnung welchen vektor mit was etc... *vektor-niete* *seufzt*
aus dem Up- und right-vector kannst du das kreuzprodukt bilden. Dadurch bekommst du den Normalenvektor der Ebene der Plane. (Formel suche mal im Tafelwerk)
Ax + By + Cz + D = 0 ist die allgemeine Ebenengleichung
(A,B,C) sind die Werte des Normalenvektors -> Einsetzen
jetzt fehlt nur noch D, da setz du einfach einen Punkt der Ebene der bekannt ist in die Gleichung ein und so kannst du D ausrechnen.
also den anfang versteh ich.. aber hier hapert's ein wenig *g*
Pellaeon hat geschrieben:
jetzt fehlt nur noch D, da setz du einfach einen Punkt der Ebene der bekannt ist in die Gleichung ein und so kannst du D ausrechnen.
Welchen punkt denn...? Ich hab doch garkeinen bekannten punkt... alles was ich bis hierhin habe ist eine ebene und eine Linie... ich bräuchte da jetzt den schnittpunkt der ebene mit der linie.
Wobei mir da grad einfällt, bei der rechnung da oben ist die ebene ja noch garnicht da, wo das Objekt ist... ist D dann evtl. die position des Objektes??? und wenn ja, das ist doch ne XYZ-Koordinate... wie packe ich die in ein einfaches D? *g*
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Eine Ebene kann man auch in Parameter Form schreiben:
ResultatVektor=a*VektorA + b*VektorB + Aufpunkt
VektorA und VektorB liegen in der Ebene drinnen. Der Aufpunkt ist ein Punkt der in der Ebene liegt.
Diese Form der Ebene kann man nun in die Koordinatenform umwandeln.
n1*x1 + n2*x2 + n3*x3 + n0 = 0
Liegt ein Punkt (x1,x2,x3) in der Ebene so ist das obere eine wahre Aussage.
Um die Koordiantenform aufzustellen brauchen wir die Werte n1,n2,n3 und n0.
Der VektorN(bestehend aus n1,n2 und n3) ist ein Vektor der Senkrecht auf die Ebene steht (Die Länge hat zwar auch eine Bedeutung aber die ist unwichtig). Diesen VektorN erhälst du durch das Kreuzprodukt.
Wenn du den in die Gleichung einsetzt fehlt dir nur noch n0. Setzt du nun einen Punkt der in der Ebene liegt für x1,x2 und x3 ein so kannst du n0 ausrechnen.
MfG
Flo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ohne das D hast du eine menge von Ebenen die alle Parallel zueinander liegen. Das D sagt damit quasi welche Ebene aus der Menge von Ebenen du wirklich haben willst.
Du findest das D raus, wie hier schon mehrfach erwähnt, wenn du einen Punkt, von dem du weißt, dass er in der Ebene liegt, in die Ebenengleichung einsetzt und dann diese nach D umstellt.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.