Eine Frage zur Devil Physic Engine
Übersicht

onkelz89Betreff: Eine Frage zur Devil Physic Engine |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
hab folgendes Problem. Ich möchte da es sonst zu langsam ist alle Objekte die mit der Physik Engine arbeiten werden, nur dann auch als solches im Program ansehen lassen wenn sich die Gegenstände bewegen. Ansonsten sollen es ganz normale Objekte sein. Dazu muss ich die Objekte auf 1mal die genau gleiche Position bringen - was nicht so schwer ist. Außerdem aber auch genau die gleiche Drehung erzeugen - sodass kein Übergang zu sehen ist... Ansatz: Code: [AUSKLAPPEN] PositionEntity test,ODE_dBodyGetPositionX#(pm\body),ODE_dBodyGetPositionY#(pm\body),ODE_dBodyGetPositionZ#(pm\body)
phyx#=ODE_dBodyGetPitch#(pm\body) phyy#=ODE_dBodyGetYaw#(pm\body) phyz#=ODE_dBodyGetRoll#(pm\body) conx#=EntityPitch(test,True) cony#=EntityYaw(test,True) conz#=EntityRoll(test,True) newx#=0 newy#=0 newz#=0 If phyx#<conx# Then newx#=conx#-phyx# If phyx#>conx# Then newx#=phyx#-conx# If phyy#<cony# Then newy#=cony#-phyy# If phyy#>cony# Then newy#=phyy#-cony# If phyz#<conz# Then newz#=conz#-phyz# If phyz#>conz# Then newz#=phyz#-conz# If newx#<0 Then newx#=newx#+360 If newy#<0 Then newy#=newy#+360 If newz#<0 Then newz#=newz#+360 If newx#>359 Then newx#=newx#-360 If newy#>359 Then newy#=newy#-360 If newz#>359 Then newz#=newz#-360 TurnEntity test,newx#,newy#,newz#,True Test ist in dem Fall das Objekt (normal) nachdem zB 5 Frames lang sich das Phsikobjekt nichtmehr bewegt hat... Wenn ich das Program starte - sehe ich das Objekt zwar auf der richtigen stellen. Jedoch ununterbrochen wie wild am rumdrehen... auch wenn das Physikobjekt still steht... Irgendwas beachte ich wohl nicht, oder ist ganz und gar falsch. Bitte helf mir ![]() Danke im Vorraus EDIT: zweiter Ansatz... geht aber auch nur minimal besser Code: [AUSKLAPPEN] If phyx#<conx# Then newx#=conx#-phyx# TurnEntity test,-newx#,0,0 If phyx#>conx# Then newx#=phyx#-conx# TurnEntity test,newx#,0,0 If phyy#<cony# Then newy#=cony#-phyy# TurnEntity test,0,-newy#,0 If phyy#>cony# Then newy#=phyy#-cony# TurnEntity test,0,newy#,0 If phyz#<conz# Then newz#=conz#-phyz# TurnEntity test,0,0,-newz# If phyz#>conz# Then newz#=phyz#-conz# TurnEntity test,0,0,newz# |
||
onkelz89 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab vielleicht das Prob... komme so aber nicht weiter:
Code: [AUSKLAPPEN] If KeyHit(8) Then TurnEntity test2,15,0,0,True:turnx#=turnx#+15 If KeyHit(9) Then TurnEntity test2,0,15,0,True:turny#=turny#+15 If KeyHit(7) Then TurnEntity test2,0,0,15,True:turnz#=turnz#+15 If KeyHit(6) Then TurnEntity test,trunx#,turny#,turnz#,True:turny#=0:turnz#=0:turnx#=0 Die sache ist wenn man den Code ausführt und am Anfang Keyhit(7) also die 8 drückt, dann dreht er sich bei 5 (Keyhit(6)) nicht... und nach einigen Drehungen wechselt der Button "ohne Function"... Ist das ein Bug in Blitz??? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei KeyHit(6) solltest du RotateEntity nehmen.
TurnEntity ist eine relative Rotation zur jetzigen Rotation. Wenn du es jedoch auf einen fixen Winkel setzen willst (was der sinn von deinem addieren und setzen zu sein scheint), so musst du rotate nehmen. Allerdings ist anzumerken, dass auch dann das resultat normalerweise ein anderes sein wird. das liegt daran, dass 3 getrennte rotationen nicht eindeutig sind. Dies werden sie nur wenn man sie immer in der gleichen reihenfolge ausführt und zwar in der gleichen wie es der befehl mit allen 3 gleichzeitig um die volle winkelmenge tun würde. Dies ist nicht einfach zu umgehen. Der normale Ansatz sind Quaternions |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
onkelz89 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, erstmal vielen dank für die info - werd mir mal en paar Sachen darüber auf Wiki durchlesen... weiß nähmlich nich wirklich was das ist ![]() Oder hat jemand ne kurzanleitung? Wenn nein is auch nicht schlimm. Hauptsache das Problem ist damit lösbar |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kurzanleitung wofür?
Quaternion? Nein, das ist auch kein Anfängerthema, deswegen sollte man schon ein wenig was mathematisch verstehen (Euler Winkel und Matrizen zwangsweise denn man wird beides brauchen, darüber hinaus vielleicht noch komplexe zahlen) wenn man sich an diese heran wagen will. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
onkelz89 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, wie gesagt danke für die Hilfe - werde mir die Sachen mal auf Wiki anschauen - ein erster Blick drauf hat mich ziemlich zweifeln lassen aber naja je mehr man nachließt desto logischer wird alles ... Mathe eben ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group