MoveEntity und Gravity ! ?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

eXceptION

Betreff: MoveEntity und Gravity ! ?

BeitragMi, Nov 03, 2004 4:56
Antworten mit Zitat
Benutzer-Profile anzeigen
als ich ein Helicopter Simulation mache, habe ich eben einen Problem gefunden...

das Helikopter soll nach local Y-axis nach oben fliegen wenn der Spieler "nach oben" drückt... Logischerweise...

Code: [AUSKLAPPEN]
if (KeyHit(upkey%)) then ys# = ys# + 0.001 ;oder irgendsowas...
MoveEntity(heli, 0, ys#, 0);


na gut... das Helicopter kann sich auch drehen, durch Y, Z und X...

so... MoveEntity() bringt das Helicopter schon in die richtige richtung...

was mache ich jetzt mit die Gravity? die soll ja das Helicopter direct nach mitte erde bringen (global Y-axis)!!! das kann ich ja nicht mit MoveEntity(), aber TranslateEntity()?

Code: [AUSKLAPPEN]
TranslateEntity(heli, 0, gr#, 0) ;das hier ist unsinn... :S
gr# = gr# + 0.001


könnt ihr das problem schon verstehen? oder braucht ihr mehr erklärungen?
Norweger...

Spreche aber verdammt gut 8086

frigi

BeitragMi, Nov 03, 2004 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
doch, translateentity stimmt schon. damit müsste es gehen.

eXceptION

BeitragMi, Nov 03, 2004 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
lol... wieso beginner frage? Embarassed

nein, TranslateEntity() ist unbenutzbar...

TurnEntity() auch...

ich muss eben selber'ne 3d-rotations formel errechnen, um das hinzukriegen was ich meine... und dann halt PositionEntity() und RotateEntity() benutzen... kacke dass mein deutsch so schlecht ist dass ich euch es nicht erklären kann...
Norweger...

Spreche aber verdammt gut 8086

BladeRunner

Moderator

BeitragDo, Nov 04, 2004 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich denke frigi müsste recht haben, denn laut Onlinehilfe bewirkt translateentity:
Zitat:
TRANSLATEENTITY Entity, X#, Y#, Z# [,Global]


Beschreibung Blitz3D

Die Anweisung TRANSLATEENTITY verschiebt ein Objekt (entity) um einen bestimmten XYZ-Abstand.

Beachte, dass das Objekt relativ zu seiner Position verschoben wird, wobei die Drehwinkel nicht beachtet werden.

Der optionale Parameter "Global" gibt an, ob die Drehwinkel vom Parent-Objekt berücksichtigt werden sollen. Bei 0 werden die Winkel des Parent-Objekts beachtet. Bei 1 wird es unabhängig vom Parent-Objekt verschoben

Da die Drehwinkel nicht beachtet werden bedeutet ein translateentity 0,grav,0 immer eine Verschiebung auf der Globalen y-Achse.
Was nicht stimmt ist das hier:

Code: [AUSKLAPPEN]
gr# = gr# + 0.001
da du ja die Gravitation so lange erhöhst bis die Steigfähigkeit des Helikopters kleiner als der "Gravitationssog" ist.
Entweder du ziehst also einen festen Betrag ab (gr#=.001) oder aber du weisst dem Helikopter auch nach oben eine Geschwindigkeit zu (sein Throttle) und "subtrahierst" die Gravitation von dieser Steiggeschwindigkeit (delty_y#=throttle#+gr#).

Nur so als Idee...

[OT] wie kommt ein Norweger auf n deutsches Forum? Aber Herzlich Willkommen, immer wieder mal schön neue Leute hier zu haben Wink
[/OT]
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

eXceptION

BeitragDo, Nov 04, 2004 0:54
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für das tipp

nur... es ist trotzdem nicht ganz was ich versuche...

dieses helikopter hat mehrere throttles... sogar 3...

yaw, pitch and engine (nach local oben) (und NICHT roll, dazu noch mehr später)

roll wird durch maus x position geändert
pitch durch maus y
und yaw durch [a] und [d]
engine durch [w]

beispiel: (lass erstmal gravity aus...)

für etwa 3 sekunden halte ich [a]... das helikopter dreht sich schneller und schneller rundum y axis (yaw), also horizontal drehung

danach ziehe ich die maus nach oben... das helikopter fängt an zu pitchen... jetzt soll der helikopter in die boden schauen wärend die yaw rotation constant sein soll...

argh... schwierig zu erklären... Evil or Very Mad

also... das helikopter soll pitchen bis es direct nach uten schaut... jetzt soll es so aussehen als hätte es gerollt (durch z-axis)

wenn ich JETZT [a] noch 3 sekunden halte, soll es wieder anfangen zu yaw'en... obwohl es jetzt "rollt" .... lol...

kannst du das verstehen?

egal... probier jetzt mit gravity...

das helikopter guck in irgendeiner richtung... halte ich [w] gedrückt, soll es schneller und schneller in local y axis nach "oben"

wärend gravity es direct nach unten zieht...


okay... es ist komplex... oder? was kann gemacht werden?

Grüße aus Norwegen! Smile
Norweger...

Spreche aber verdammt gut 8086

frigi

BeitragDo, Nov 04, 2004 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
sry, aber ich versteh dein problem nicht so ganz Confused
so wie ich es verstanden habe, würde es ausreichen, wenn man mit translateentity den helikopter immer zum boden "zieht". damit er dann abhebt muss man diese kraft überwinden. so würde er relativ realistisch fliegen....

eXceptION

BeitragDo, Nov 04, 2004 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt, nur die "überwindungs" kraft soll sich verändern wenn das helikopter rollt oder pitcht... wie, jetzt, verändere ich diese kraft?
Norweger...

Spreche aber verdammt gut 8086

frigi

BeitragDo, Nov 04, 2004 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
die "Überwindungskraft" ist einfach die kraft, die der rotor vom heli "wegdrückt". dadurch wird er vom boden fern gehalten. wenn sich der helikopter nun neigt, (und die kraft, mit der der helikopter abhebt mit moveentity erzeugt wird) wirkt die kraft nicht mehr zum boden, sondern in eine andere richtung (hinten, vorne,.....). -> der heli sinkt.

P.S.: keine ahnung, ob ich dich jetz richtig verstanden habe, aber so würde ich nun mal einen heli simulieren :/

Hubsi

BeitragDo, Nov 04, 2004 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab von 3D keine Ahnung, aber soweit ich weiß läßt sich doch auch recht einfach der Neigungswinkel eines Objekts auskundschaften. Daraus könnte man dann den prozentualen Verlust an Auftrieb errechnen und trala Smile
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

frigi

BeitragDo, Nov 04, 2004 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, ich habs noch nie ausprobiert,(bin auch eher der 2dler) aber ich denke meine methode würde schon reichen Confused

eXceptION

BeitragFr, Nov 05, 2004 2:09
Antworten mit Zitat
Benutzer-Profile anzeigen
@frigi: deine metode reicht, wenn das helikopter immer in die horizonte schaut und sich nie pitcht oder rollt... die "überwindungs" kraft ist optimal in diese position... es soll aber niedriger (durch trigonometrie ausgerechnet, weiss ich) werden wenn es so nicht der fall ist... Shocked

@hubsi: lustig... Rolling Eyes ich brauche aber realistischen physik..

guckt euch battlefield: desertcombat-mod an... der helikopter physik da ist was ich meine...
Norweger...

Spreche aber verdammt gut 8086

BladeRunner

Moderator

BeitragSo, Nov 07, 2004 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm...
meine Idee wäre: erstelle einen pivot 0,1,0 (relativ) zu deinem helikopter (also über ihm) der als Child des Helis fungiert.
Wenn du nun die entityx,entityy und entityz von Heli und Pivot voneinander subtrahierst erhälst du die %-verschiebung des Helis auf den einzelnen Achsen. Nun kannst du die höhe*verschiebung als throttle nutzen.
Ungetestet, sollte aber theoretisch funktionieren.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

eXceptION

BeitragMo, Nov 08, 2004 3:50
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm... möglicherweise genial... werde versuchen... Smile
Norweger...

Spreche aber verdammt gut 8086

eXceptION

BeitragMo, Nov 08, 2004 9:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube ich bin zu doof... kriege es nicht hin...
Norweger...

Spreche aber verdammt gut 8086

BladeRunner

Moderator

BeitragMo, Nov 08, 2004 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur ein simpler test, sicher noch ausbaufähig. Der code ist recht Dirty da schnell hingesaut (zudem bin ich in 3D sehr unerfahren):
Code: [AUSKLAPPEN]

Graphics3D 640,480
SetBuffer BackBuffer()

Kamera=CreateCamera ()
light=CreateLight(1)
RotateEntity light,90,0,0

cube=CreateCube()
EntityColor cube,100,100,255
piv=CreatePivot(cube)
ku=CreateSphere(5,piv)
PositionEntity kamera,0,0,-5

PositionEntity piv,0,1,0
PositionEntity cube,0,0,0
geschw#=150

While Not KeyDown(1)
   TurnEntity cube,.35,1,0
   
RenderWorld
Text 0,0,EntityX(cube,1)+"  ,"+EntityY(cube,1)+"  ,"+EntityZ(cube,1)
Text 0,30,EntityX(piv,1)+"  ,"+EntityY(piv,1)+"  ,"+EntityZ(piv,1)   
x#=EntityX(cube,1)-EntityX(piv,1)
y#=EntityY(cube,1)-EntityY(piv,1)
z#=EntityZ(cube,1)-EntityZ(piv,1)
Text 0,60,(x*-1)+"x  ,"+(y*-1)+"y  ,"+(z*-1)+"z"
Text 0,90,"Geschwindigkeit:"+geschw+"  Mit Rotation:"+(geschw*(y*-1))
Flip
Wend
End

Aber es funktioniert (wahrscheinlich...) Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

eXceptION

BeitragMo, Nov 08, 2004 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
okey, mein programm(hol dir eine schöne grastexture...ja und fixe die geschwindigkeit constanten, wenn's zu schnell läuft):Code: [AUSKLAPPEN]
Graphics3D(800, 600, 32, 1)

SetBuffer(BackBuffer())

Cam = CreateCamera()
Lgt = CreateLight(3, Cam)
LightConeAngles(Lgt, 25, 70)
LightRange(Lgt, 10)

AmbientLight(192, 192, 192)

Pln = CreatePlane(16)
PlnTex = LoadTexture("C:\B3D_Projects\GFX\grass1.BMP", 8)
EntityTexture(Pln, PlnTex)
ScaleTexture(PlnTex, 15, 15)

Global ax# = 0, ay# = 0, az# = 0
Global px# = 0, py# = 5, pz# = 0

While Not KeyHit(1)         ;[ESC]
  MoveMouse(400, 300)
  axs# = axs# - MouseYSpeed() / 20000.0
  azs# = azs# - MouseXSpeed() / 20000.0
  If (KeyDown(17)) Then     ;[W]
    engine# = engine# + 1.0 / 500000.0
  ElseIf (KeyDown(31)) Then ;[S]
  Else
    engine# = engine# - 1.0 / 2000000.0
  End If
  If (engine# < 0) Then engine# = 0
  If (KeyDown(30)) Then     ;[A]
    ays# = ays# + 1.0 / 20000.0
  ElseIf (KeyDown(32)) Then ;[D]
    ays# = ays# - 1.0 / 20000.0
  End If

  ax# = ax# + axs# ;kannst auch RotateEntity benutzen, dann halt mit diese,
  ay# = ay# + ays# ;diese,
  az# = az# + azs# ;und diese...

  TurnEntity(Cam, axs#, ays#, azs#, 0)
  PositionEntity(Cam, px#, py#, pz#)

  UpdateWorld()
  RenderWorld()
  Line(400, 295, 400, 305)
  Line(395, 300, 405, 300)
  Flip()
Wend

End
wie du siehst, es ist FAST wie desertcombat... fehlt nur RICHTIGE dynamic beim rotierung, und ich habe schwerkraft ausgelassen...
Norweger...

Spreche aber verdammt gut 8086

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group