AngularVelocity / Rotationsgeschwindigkeit

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
RatProject
Beiträge: 12
Registriert: 01.04.2011 18:54

AngularVelocity / Rotationsgeschwindigkeit

Beitrag 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!
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: AngularVelocity / Rotationsgeschwindigkeit

Beitrag 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.
Bild

- formerly known as Bananenfreak -
RatProject
Beiträge: 12
Registriert: 01.04.2011 18:54

Re: AngularVelocity / Rotationsgeschwindigkeit

Beitrag 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...
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: AngularVelocity / Rotationsgeschwindigkeit

Beitrag 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.
Bild

- formerly known as Bananenfreak -
RatProject
Beiträge: 12
Registriert: 01.04.2011 18:54

Re: AngularVelocity / Rotationsgeschwindigkeit

Beitrag 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!
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: AngularVelocity / Rotationsgeschwindigkeit

Beitrag 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.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: AngularVelocity / Rotationsgeschwindigkeit

Beitrag 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)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
RatProject
Beiträge: 12
Registriert: 01.04.2011 18:54

Re: AngularVelocity / Rotationsgeschwindigkeit

Beitrag 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!
Antworten