Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

17.02.2012, 22:30

Kinematic Joint Problem (Newton 2.33)

Hallo. Ich habe mir gerade mal Gedanken gemacht bzw. ein Freund, wie wir das Aufheben von Objekten realisieren. Newton bietet da einen CinematicJoint an, den ich auch gleich ausprobiert habe. Nun jetzt ist das Problem, dass der eine Jointpunkt immer am Rand des Objektes Positioniert wird. Wenn man jetzt natürlich das Objekt "In der Hand hat", und sich umsieht(First Person), dann dreht sich das Objekt um den Punkt. Also eigentlich dreht es sich nicht wirklich denn das Objekt wird nur verschoben nicht aber gedreht. dadurch sieht es so aus als ob es sich dreht. Jetzt ist das doofe, dass das schon komisch aussieht wenn das Objekt sich um den Punkt des Joints dreht. Also muss ich jetzt irgendwie das Objekt drehen. Wie ich das mache ist mir nicht ganz klar. Also die Rechnung schon, aber ich kann nicht einfach bei Newton den Physikkörper eine Matrix zuweisen, weil dann das Objekt nicht richtig kollidiert. Ein Bild ist im Anhang wie ich das meine :) Danke im Voraus.
Anhang: P = Spieler
Der Pfeil im Viereckigen Objekt ist die Richtung des Objektes.
Die zwei Linien im Kreis sind der Joint und gleichzeitig die Blickrichtung.
Wie man sieht ist nachdem der Spieler sich um 90° im Uhrzeigersinn gedreht hat das Objekt immer noch Richtung Norden ausgerichtet. Doch es sollte eigentlich Richtung Osten ausgerichtet sein.
Die Punkte am Kreis und am Objekt ist einer der Joint Kontaktpunkte. Es ist nicht ganz genau gezeichnet aber ich denke man kann es erkennen.
»FSA« hat folgendes Bild angehängt:
  • Picture0005.jpg

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (23.02.2012, 19:42)


FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

2

18.02.2012, 13:50

Habe es jetzt fasst geschafft, ich habe mit einem Quaternionen Vektor den CinematicController beeinflusst :) Zwar nicht das beste aber es funktioniert.
Jetzt muss ich nur noch die Z Achse beeinflussen.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (23.02.2012, 19:42)


FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

20.02.2012, 22:24

OK jetzt komme ich beim besten Willen nicht mehr weiter :(
Also. Es liegt nicht an der Rotation des Würfels sondern des Joints. Ich kann einfach die Jointmatrix setzen. Da dachte ich mir das ich einfach immer zur Aktuellen Rotation des Würfels noch die Kmaerarotation hinzu addiere. Das gibt den Effekt das der Würfel immer zu mir hin zeigt und dann quasi steht, obwohl er sich dreht. Jetzt habe ich nur das Problem immer wenn ich den Würfel anklicke und der Joint erstellt wird, dann springt der Würfel auf die Rotation von 0|0|0. Jetzt weiß ich einfach nicht wie ich das ausrechnen soll. Danke im Voraus.
Mein Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Frame1
if(a)
        {
            NewtonBodyGetMatrix(PickedBody, Actual_M);
            a = false;
            CustomKinematicControllerGetTargetMatrix(PickController, bla);
            off = CamHandler->GetCameraAngleY();
            off1 = CamHandler->GetCameraAngleX();
        }

// Alle anderen Frames
if(PickController)
        {
            Matrix m = MatrixIdentity();
            m = MatrixRotation(Vector3( asinf(Actual_M.m23) + (-CamHandler->GetCameraAngleY() - off), asinf(bla.m31) + (CamHandler->GetCameraAngleX() - off1), asinf(lu.m12)));
            CustomKinematicControllerSetTargetMatrix(PickController, m);
        }

Wichtig ist m = MatrixRotation(...) Denn da lege ich die Rotation des Joints fest.
Das Ziel ist, dass ich den Würfel in jeder Position und Rotation aufheben kann ohne das er sich bei Picking verändert und sich dann mitdreht, damit es nicht so aussieht als ob er in der Luft steht.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »FSA« (23.02.2012, 19:44)


FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

4

29.02.2012, 16:24

Jaa ich bin weiter gekommen. ich habe die tolle Funktion atan2 entdeckt :) Es gab noch ein neues Problem, das das Objekt am Anfang "zuckt"( :crazy: )das lag an der Sinusfunktion :dash:
Bald ist das Problem behoben :thumbsup:
PS ich mag den :crazy: Smiley :)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige