Nehmen wir an wir haben einen Punkt an den Koordinaten 0, 0, 0 und 2 Matritzen. MatrixA würde den punkt um +10 auf X verschieben. MatrixB würde den Punkt +10 auf Y verschieben.
Wenn ich nun einfach beide Matritzen nacheinander auf den Punkt anwende landet er am ende bei XYZ: 10, 10, 0.
Was aber wenn ich beide Matzritzen nur zu 50% anwenden möchte...? Also MatrixA nur 50% = Der punkt landet bei 5, 0, 0.. und dann MatrixB mit 50% = 5, 5, 0.
Wobei die 50% jetzt nur ein beispiel sind.. könnte auch 30%/70% sein.. halt von der Theorie so wie in 3D Programmen das JointSkinning.. ein Joint transformiert einen Punkt mit einem Weighting.
Hat jemand ne ahnung wie das geht???
Au'revoir,
Aya~
PS: Bezieht sich leider nicht nur auf die Translation.. sondern hauptsächlich auf die Rotation... also einfach nur die TranslationWerte der Matritze verändern reicht nicht
Registriert: Mi Dez 15, 2004 20:36 Beiträge: 454 Wohnort: Wien, Österreich
Ich weiss nicht ob ich mich irre, aber man kann die Matricen interpolieren.
EDIT
Am einfachsten wäre es die Werte selbst zu interpolieren und dann die Matricen zu erzeugen.
z.B. du willst eine Translation durchführen:
P <- ausgangs Punkt
T <- Vektor der Translation
scale <- scalar 0<=scalar<=1 ( 0 - 100 % )
T_new = ( t.x * scale, t.y * scale, t.z * scale);
und jetzt mit T_new eine Matrix formieren.
_________________ "Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump
Zuletzt geändert von sniper am Do Jun 09, 2005 16:50, insgesamt 1-mal geändert.
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
@Lyr: Deine Lösung funktioniert aber nur, solange sich der Dummy an 0, 0, 0 befindet. wenn er standardmäßig schon an beispielsweise 10, 10, 10 liegt, dann die Matrix dazukommt (20, 10, 10) und dann halbiert wird, kommt 10, 5, 5 raus -> Das würde nicht stimmen.
Man muss schon die Matrix verändern. Ich frage mich gerade, ob einfaches halbieren aller Werte in der Matrix ausreichen würde/ richtig ist...
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Ich halbiere auch nichts, ich interpoliere :-).
(10,10,10) =>
DummyA = (20,10,10)
DummyB = (10,20,10)
interpoliert = (15,15,10)
Wenn du natürlich bei den Matrizen insgesamt nicht auf 100% kommst, dann ist zusätzlich noch eine Skalierung dabei, was bei dir der Fall wäre.
[edit] Und nebenbei bemerkt wird diese Methode des öfteren (zB auch von mir) auch beim Skinning verwendet. Nur bei den Normalvektoren ist es etwas problematisch, weil hier eine spherische Interpolation bessere Ergebnisse bringen würde.[/edit]
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Ach verdammt, ich meinte, dass der Punkt und nicht der Dummy nicht an 0, 0, 0 liegt.
Beispiel:
Punkt: 10, 10, 10;
MatrixA: 10, 0, 0;
MatrixB: 0, 10, 0;
Prozent: 30;
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Bei deinem Beispiel sind wieder die 100% nicht erreicht, sondern nur 60. Wenn du für die eine Matrix 30% verwendest dann solltest du für die andere 70 nehmen damit du keine Skalierung erhältst.
Aber ich denke worauf du hinaus willst ist, dass man beim Skinning die Positionen eines Punktes immer in Relation zur Ausgangsposition eines Bones angibt. Da der Titel "Matrix multiplizieren nur zu 50%" hieß, bin ich darauf nicht eingegangen, weil das eher wenig damit zu tun hat. Der Autor hat beispielsweise nicht erwähnt, dass er eine Ausgangsposition besitzt und nur da kommt dies zum tragen.
Also wenn du als Ausgangsstellung beispielsweise hast:
BoneA1/MatrixA1 = verschieben um (10,0,0)
BoneB1/MatrixB1 = verschieben um (0,10,0)
dies kannst du auch so sehen, dass sich BoneA in deinem Grafik-Editor auf Position (10,0,0) und BoneB an Position (0,10,0) befindet. Nun hast du ein Keyframe gegeben, wo beispielsweise:
BoneA2/MatrixA2 = verschieben um (5,0,0)
BoneB2/MatrixB2 = verschieben um (0,20,0)
Und du willst diese neuen Umstände nun für einen beliebigen Punkt realisieren, so sieht das folgendermaßen aus:
Als Beispiel nehm ich jetzt mal den Punkt (5,5,0)
Zuerst bestimmst du dir die Position relativ zur Ausgangsstellung der Bones, also:
OffsetA = Inverse( MatrixA1 ) * Punkt
Bsp: OffsetA = (-5,5,0)
Wenn ich nun die Ausgangsstellung nicht gegeben habe, und stattdessen als Ausgangsstellung für jeden Bone eine Einheitsmatrix annehme, so wäre:
OffsetA/B = Einheitsmatrix * Punkt = Punkt
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Ok, das hab ich so jetzt verstanden. Da fehlen mir auch ein bisschen die mathematischen Grundlagen.
Danke
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Mi Dez 15, 2004 20:36 Beiträge: 454 Wohnort: Wien, Österreich
Wie eben gesagt, eine nach der andere und dann multiplizierst du sie mit einander.
1. für 30% der Vorgesehener Transformation eine Matrix M1 machen
2. für 30% der Vorgesehener Transformation eine Matrix M2 machen
3. für 40% der Vorgesehener Transformation eine Matrix M3 machen
M = M1 * M2;
M = M * M3;
M <- das was du brauchst.
_________________ "Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Das geht immer in der selben Art weiter:
Dummy1 = Matrix1 * Punkt
Dummy2 = Matrix2 * Punkt
...
DummyN = MatrixN * Punkt
Und nun brauchst du natürlich noch N-Prozentwerte wodurch du wieder dein interpoliertes Ergebnis erhältst:
Ergebnis = Dummy1 * (Prozent1/100) + Dummy2 * (Prozent2/100) + .... + DummyN * (ProzentN/100)
Und wie gesagt sollte sich das mit den Prozent immer auf 100 ausgehen, was du aber bei deinem Bsp mit 30,30,40 Prozent eh beachtet hast.
@sniper_w:
Deine Änderung hab ich irgendwie ganz übersehen unter den ganzen Posts. Obwohl es natürlich möglich ist das in deiner Art zu machen, dürfte es sich bei Rotationen etwas schwieriger gestalten. Auch wenn diese Art eine spherische Interpolation, sowohl bei den Punkten (falls erwünscht) als auch bei den Normalvektoren erleichtern würde, wenn man sehr viele Punkte mit den selben Prozentanteilen hat.
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.