Seite 1 von 1

AngularVelocity / Rotationsgeschwindigkeit

Verfasst: 19.01.2014 15:23
von RatProject
Hallo,

Ich experimentiere gerade mit OGRE und der zugehörigen Physik-Engine.

Über GetEntityAttribute() verbunden mit den Flags #PB_Entity_LinearVelocity bzw. #PB_Entity_AngularVelocity kann man ja jederzeit die lineare Geschwindigkeit und die Rotationsgeschwindigkeit eines Entity an allen drei Achsen ermitteln.
Die lineare Geschwindigkeit lässt sich ganz einfach mit EntityVelocity() verändern bzw. stoppen.
Die entsprechende Funktion für die Rotationsgeschwindigkeit scheint es aber nicht zu geben... habe ich vielleicht etwas übersehen oder gibt es eine andere Möglichkeit, eine von der Physik-Engine verursachte Rotation zu verändern bzw. zu stoppen? Die Forensuche hat mich leider auch nicht weitergebracht...

Ich verwende PB 5.21 (x86).

Für mögliche Antworten bedanke ich mich schon mal im voraus!

Re: AngularVelocity / Rotationsgeschwindigkeit

Verfasst: 19.01.2014 20:27
von Chimorin
Hi,
leider gibt es sowas (noch) nicht.
Du könntest aber mithilfe von

Code: Alles auswählen

ApplyEntityImpulse(#Entity, x, y, z [, PositionX, PositionY, PositionZ])
Und einer Verschiebung der Position eine Rotation erzwingen.

Re: AngularVelocity / Rotationsgeschwindigkeit

Verfasst: 19.01.2014 22:48
von RatProject
Danke für die schnelle Antwort.

Ja den Gedanken hatte ich auch schon, hatte aber gehofft, daß es eine einfachere Methode gibt. Ich stelle es mir schwierig vor, die Rotation auf diese Weise vollständig zu stoppen.
Na dann werd ich mal weiter experimentieren...

Re: AngularVelocity / Rotationsgeschwindigkeit

Verfasst: 20.01.2014 16:30
von Chimorin
Du kannst ja, wie schon von dir erwähnt, die Winkelgeschwindigkeit abrufen.
Mit
v = w * r
hättest du dann die Rotationsgeschwindigkeit und nun müsstest du diese nur *(-1) nehmen und wieder in meinen oben geposteten Befehl stopfen. Meiner schnellen Meinung nach müsste das funktionieren, "r" kannst du somit beliebig annehmen.

Re: AngularVelocity / Rotationsgeschwindigkeit

Verfasst: 20.01.2014 22:33
von RatProject
Habe es leider bis jetzt nicht geschafft, mit Hilfe von ApplyEntityImpulse() eine saubere Rotation hinzukriegen :cry:
Vielmehr musste ich feststellen, daß sich die von der Physik-Engine verursachte Rotation teilweise sehr merkwürdig verhält und sogar manchmal einfach unvermittelt stoppt... wurde in einem anderem Thread auch schon mal angemerkt (finde ihn gerade nicht wieder).

Eine lineare Beschleunigung lässt sich gut umsetzen, die physik-basierte Rotation ist aber (meiner Meinung nach) in dieser Form kaum zu gebrauchen. Ich denke ich werde sie mittels

Code: Alles auswählen

EntityAngularFactor(#Entity, 0 , 0, 0)
deaktivieren und über RotateEntity() selbst implementieren.

Trotzdem vielen Dank für die Hilfe!

Re: AngularVelocity / Rotationsgeschwindigkeit

Verfasst: 21.01.2014 10:47
von Chimorin
Über RotateEntity() hat die Physikengine keine Informationen über deine Scheinrotationen... es könnten somit einige Irritationen auftreten. Aber da koennte ich auch falsch liegen.

Re: AngularVelocity / Rotationsgeschwindigkeit

Verfasst: 24.01.2014 01:23
von STARGÅTE
RatProject hat geschrieben:Vielmehr musste ich feststellen, daß sich die von der Physik-Engine verursachte Rotation teilweise sehr merkwürdig verhält und sogar manchmal einfach unvermittelt stoppt... wurde in einem anderem Thread auch schon mal angemerkt (finde ihn gerade nicht wieder).
Das ist beabsichtigt, damit Objekte auf anderen Objekte nicht "zittern" werden sie ab bestimnten Grenzwerten in Ruhezustand versetzt.
Diese Grenze kannst du verringern:
SetEntityAttribute(#Entity, #PB_Entity_LinearSleeping, Wert)
SetEntityAttribute(#Entity, #PB_Entity_AngularSleeping, Wert)

Re: AngularVelocity / Rotationsgeschwindigkeit

Verfasst: 26.01.2014 17:14
von RatProject
SetEntityAttribute(#Entity, #PB_Entity_LinearSleeping, Wert)
SetEntityAttribute(#Entity, #PB_Entity_AngularSleeping, Wert)
Das hatte ich übersehen...
Super, das hilft mir auf jeden Fall weiter :allright:

Vielen Dank!