Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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

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

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?

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

  • 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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.