Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 20, 2025 00:37

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Objekt auf der Kamera-Plane bewegen?
BeitragVerfasst: Fr Mai 06, 2005 20:10 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

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*

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 07, 2005 10:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 15:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

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*

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 16:07 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 12, 2005 22:17 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 16, 2005 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
du kannst doch einen Punkt des Objektes einsetzen, dieses liegt doch In der gesuchten Ebene oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 16, 2005 18:48 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ganz genau.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]