carjacker Geschrieben 31. März 2008 Geschrieben 31. März 2008 Hi, bin zum Ersten mal hier, also ein nettes 'Hallo' an alle erstmal! Hoffe mal mir kann hier irgendjemand helfen. z.Z. sitze ich an meiner Facharbeit in Informatik über die Fernbedieung der Nintendo Wii, und die Möglichkeiten sie für andere Zwecke als als Spielesteuerung einzusetzen. Nun bin ich gerade dabei ein FingerTracking Script zu entwerfen, welches mir ermöglichen soll, mit 2 Fingern einen 3D-Würfel zu drehen. Das Ganze habe ich in GlovePie geschrieben, da dies mir am leichtesten erschien. Habe zwar auch Delphi-Kenntnisse, aber ob ich damit die Wiimote programmieren kann, bin ich mir nicht ganz sicher und ist mir auch ehrlich gesagt zu kompliziert:D. Mein Problem nun hat aber relativ wenig mit der Wiimote selber zu tun, sondern mit dem Umgang von 3D-Objekten. Zur kleinen Hilfe poste ich ersteinmal mein bisheriges Script: obj1.size= [0.8,0.8,0.8] obj1.colour = [100%, 0%, 30%] var.smooth = 0.00001 //Position von dot1 dauerhaft var.x2 = wiimote.dot1X var.y2 = wiimote.dot1x //Position von dot1 nur wenn dot2 nicht vorhanden if wiimote.dot2vis = false then var.x1 = Wiimote.dot1x var.y1 = Wiimote.dot1y end if //rechts drehen if (wiimote.dot1vis) and (wiimote.dot2vis) and (var.x2 > var.x1) then obj1.yaw = obj.yaw + (sqr(var.x2 - var.x1) *var.smooth) end if // links drehen if (wiimote.dot1vis) and (wiimote.dot2vis) and (var.x2 < var.x1) then obj1.yaw = obj1.yaw - (sqr(var.x2 - var.x1) *var.smooth) end if // nach oben drehen if (wiimote.dot1vis) and (wiimote.dot2vis) and (var.y2 > var.y1) then obj1.pitch = obj1.yaw + (sqr(var.y2 - var.y1) *var.smooth) end if //nach unten drehen if (wiimote.dot1vis) and (wiimote.dot2vis) and (var.x2 < var.x1) then obj1.pitch = obj1.yaw - (sqr(var.y2 - var.y1) *var.smooth) end if // Variablen Anzeige debug = 'X=' + var.x1 + ' Y=' + var.y1 + ' X2=' + var.x2 + ' Dif=' + (var.x2 - var.x1) //by Hannes Speicher März 2008 Alles in Allem funktioniert das auch schon ganz gut, nur wenn ich den Würfel jetzt z.B. um 90° nach rechts um die Y-Achse drehe (Yaw) und dann den Pitch verändern will, dreht sich der Würfel natürlich nicht mehr um die Z-Achse, also die vordere Seite nach oben/unten, sondern die linke Seite nach oben/unten um die X-Achse. Das würde aber die Steuerung sehr seltsam machen. Ich brauche nun also eine Möglichkeit den Würfel nicht um seine eigenen Achsen zu drehen sondern über "globale" Achsen. Kann mir irgendjemand helfen? Wäre super... Muss das ganze in 2 Wochen abgeben und hab noch 'n paar Seiten vor mir. Besten Dank im Vorraus! gruß carjacker PS: wer sich unter dem Ganzen noch nichts vorstellen kann; hier ein Link: YouTube - Tracking fingers with the Wii Remote Nur, dass ich mit einem 3D-Würfel arbeiten will, den ich später evtl. sogar mit Hilfe einer rot/blau-Brille optitsch vom Bildschirm abheben will. Zitieren
Guybrush Threepwood Geschrieben 31. März 2008 Geschrieben 31. März 2008 Hi und willkommen im Forum Also ich kenn mich da jetzt nicht so aus, aber mal so als Denkansatz: Wäre es da nicht besser statt des Würfels die Kamera zu drehen? Also den Punkt von dem aus du den Würfel betrachtest? Zitieren
flashpixx Geschrieben 31. März 2008 Geschrieben 31. März 2008 Hi, ich gehe davon aus, dass Du mit Matrizen und Vektoren vertraut bist. Die Matrizen geben die jeweilige Rotation um die XYZ-Achsen wieder. HTH Philrotate-x.pdfrotate-y.pdfrotate-z.pdf Zitieren
carjacker Geschrieben 1. April 2008 Autor Geschrieben 1. April 2008 Vielen Dank für die Antworten. Von Matrizen habe ich bisher noch keine Ahnung, aber ich denke das Wissen kann ich mir noch irgendwie Aneignen. Werde versuchen das Ganze heute Nachmittag mal in mein Programm zu implementieren. Aber muss ich das ganze auf die Kamera-Bewegung oder auf den Würfel anwenden? gruß carjacker Zitieren
flashpixx Geschrieben 1. April 2008 Geschrieben 1. April 2008 Hallo, ob Du das auf die Cam oder das Objekt anwenden musst, weiß ich nicht, das solltest Du wissen: Also wenn Du nur den Wüfel in deiner Welt hast und weißt, es kommen keine Objekte mehr hinzu, dann würde ich wohl eher die Kamera drehen, weil hier meist in den Klassen schon passende Funktionen implementiert sind. Wenn aber Deine Welt mehrere Objekte enthält und Du nur den Würfel drehen willst, dann musst Du den Würfel drehen Phil Zitieren
carjacker Geschrieben 2. April 2008 Autor Geschrieben 2. April 2008 Das mit den Matrizen versteh ich noch nicht ganz und weiß auch nicht wirklich wie ich das in GlovePie anwenden soll. Aber habe jetzt eine andere Möglichkeit ausprobiert: cam.pos += Cam.WalkLeftDir *0.004 cam.pos += Cam.WalkFwdDir *0.004 cam.yaw += 0.03666 Die Kamera ist 5 meter vom Würfel entfernt, bewegt sich also in Kreisform mit r=5 um den Würfel herum. Die Bewegung ist nur kreisähnlich, aber ich denke doch sehr genau. Aber irgendwie klappt das noch nicht ganz. Sieht einer in meinem Ansatz 'n Fehler oder so? Zitieren
flashpixx Geschrieben 2. April 2008 Geschrieben 2. April 2008 Hallo, da Du von einem Würfel sprichst, gehe ich davon aus, Du hast in einem 3D Koordinatensystem (XYZ), d.h. alle deine Objekte werden Durch 3D Vektoren repräsentiert. Wie jetzt die genaue Repräsentation des Würfels aussieht, kannt Du natürlich selbst entscheiden. Eine Möglichkeit einen Vektor (Ortsvektor), der auf eine Ecke des Würfels zeigt und von dort gehen dann alle anderen Richtungsvektoren aus, die den Würfel aufspannen. Für die Rotation um Deine Achsen, berechnest Du einfach die Multiplikation jedes Vektors mit der Matrix und dem passenden Winkel Phi. Als Literaturquelle für 3D Graphik kann ich Dir "Fundamentals of Computer Graphics" (2nd Edition) von Peter Shirley und anderen empfehlen. ISBN 1-56881-269-8 Tut mir leid, wenn ich nicht mehr helfen kann, aber Dein Quellcodeauszug lässt keine Rückschlüsse auf die Repräsentation der Daten / Welt schließen. HTH Phil Zitieren
carjacker Geschrieben 29. Oktober 2008 Autor Geschrieben 29. Oktober 2008 Hallo, ich weiß es ist ein bisschen spät, aber ich wollte mich nochmal für eure Hilfe bedanken. Hat super funktioniert mit den Matrizen. Konnte dann auch eine Facharbeit abgeben die mit 14Punkten belohnt wurde... Abzug in der B-Note wegen der Einleitung. Wen es interessiert der kann sich das ganze ja mal hier ansehen. Würd mich sehr über eure Meinung freuen. Nehme auch gerne Kritik an. Gruß carjackerFacharbeit.pdf Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.