Zum Inhalt springen

GlovePie - Würfel richtig drehen


carjacker

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 6 Monate später...

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ß

carjacker

Facharbeit.pdf

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...