Bewegliche 3D Hand

  • Bewegliche 3D Hand

    Allso ich mache 3 3D Objekte einmal die Hand, Die Finger und den Daumen.
    Meine frage ist nun wie bekomme ich die Finger auf die Hand drauf und zwar so das sich wenn sich die Hand dreht die finger an der richtigen stelle mitdrehen.

    Für 2D benutze ich das hier

    GML-Quellcode

    1. x = x + dis * cos(degtorad(dir))
    2. y = y - dis * sin(degtorad(dir))


    könnte mir da jemand ein example machen hab null ahnung wie ich das machen soll.

    EDIT 1: sorry wegen doppelpost aber ich halts einfach nicht mehr aus.
    Ich finde einfach keine lösung für das Problem.
    Es kann doch nicht sein das keiner weis wie das funktioniert, oder etwa doch

    EDIT 2: sieht nicht so aus als ob mir da jemand helfen könnte

    ps: bitte um löschung.

    Edits zusammengeschoben Kilik
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Habe aber keine ahnung wie ich das machen soll

    ps: kannst du mir das in gml zeigen

    wenn ich code sehe verstehe ich es eigentlich zimlich schnell
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bigmek ()

  • Code in GML zeigen kann ich dir nicht, da ich kein GML-Nutzer bin.
    Aber, es sollte ca so aussehen:

    Nehmen wir an du hast die Hand. Und an der Position (0 / 2 / 0) ist der Mittelfinger angebracht.
    Und jetzt willst du die hand um 90° nach rechts rotieren.
    Also erstellst du dir ne Rotationsmatrix. Ne allgemeine Rotationsmatrix sieht so aus:

    Unser Rotationsvektor wäre v = (0 / 0 / 1).
    Also:

    Quellcode

    1. R =
    2. cos(90) sin(90) (1 - cos(90))
    3. sin(90) cos(90) 0
    4. 0 0 1


    =>

    Quellcode

    1. 0 1 1
    2. 1 0 0
    3. 0 0 1


    Das multiplizierst du mit dem Vektor. Und erhältst:

    Quellcode

    1. v_neu = (2 / 0 / 0)


    Bitte schön. Die neue position des Mittelfingers.

    EDIT: achja, code...

    Quellcode

    1. Vector v = new Vector(0, 2, 0);
    2. Matrix R = new Matrix(Matrix::RotationMatrix, 90, new Vector(0, 0, 1));
    3. Vector new_pos = R * v;


    Wobei die Implementierung der Vector und Matrizen-Klassen recht trivial ist und sich in 5 Minuten erledigen lässt. Falls du doch Hilfe brauchst, hier eine Vektor und eine Matrix-Klasse in C++

    downloads.rootnode.de/data/eng…c/fbVector_8h-source.html
    downloads.rootnode.de/data/eng…c/fbMatrix_8h-source.html

    EDIT_2:
    Warst du nicht Programmierer von Beruf? N Grundwissen in Linearer Algebra is da doch mit Voraussetzung, oder nicht?

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von rootnode ()

  • Danke für die antwort

    Nein leider nicht.
    Habe gleich nach der SChule eine lehre als informatiker angefangen.

    hab es immer noch nicht so wirklich verstanden ich befürchte ich mus mich mal länger mit dem thema auseindandersetzten
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Na dann. Hier halt als Hilfestellung, hab ich oben im Edit noch reingehauen:
    downloads.rootnode.de/data/eng…c/fbVector_8h-source.html
    downloads.rootnode.de/data/eng…c/fbMatrix_8h-source.html

    Aber, in einer Lehre als Informatiker, muss man ich doch ebenfalls mit Mathe beschäftigen, oder?

    Also, back to topic:

    Im 3D-Bereich hantierst du nur noch mit Matrizen und Vektoren. Also wäre eine Einarbeitung nicht schlecht.
    Du kannst mittels Matrizen die Vektoren: Rotieren, Translatieren und Skalieren.
    Um die Vorgänge zu vereinen, kannst du die Matrizen multiplizieren. Jedoch vorsicht! Die Reihenfolge ist wichtig!
    Nehmen wir an:

    Quellcode

    1. R = Rotationsmatrix um 90°
    2. T = Translationsmatrix um (0, 1, 0);
    3. v_alt = Objekt am Nullpunkt


    Quellcode

    1. V_neu = R*T*v_alt

    Das würde das Objekt rotieren, und dann verschieben.

    Quellcode

    1. V_neu = T*R*v_alt

    Das würde das Objekt ert verschieben auf (0, 1, 0) und dann um den Nullpunkt herum rotieren, so dass es danach bei (1, 0, 0) landet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von rootnode ()

  • Danke werde mir das mal anschauen

    ps: Ja ein bischen Mathe machen wir schon
    aber nicht so komplexe sachen, sondern nur sowas wie binärrechnen
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%