Stufenweises Ausrichten auf ein Entity

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Jolinah

Betreff: Stufenweises Ausrichten auf ein Entity

BeitragSa, Jan 31, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Ich möchte ein Raumschiff auf einen Planeten ausrichten lassen, es soll sich jedoch langsam drehen und nicht sofort ausgerichtet sein wie z.bsp. bei PointEntity.

Deshalb hab ich gedacht ich benutze den Befehl AlignToVector weil man da das tempo der Ausrichtung noch angeben kann.

Funktioniert eigentlich auch recht gut.

Jedoch will ich überprüfen wann die Ausrichtung beendet ist.
Ich habe schon verschiedene Varianten versucht. Mit DeltaPitch und DeltaYaw, mit TFormVector usw..

Code: [AUSKLAPPEN]

AlignToVector ship,entityx(planet),entityy(planet),entityz(planet),0.1

If DeltaPitch#(ship,planet) = 0.0 and DeltaYaw#(ship,planet) = 0.0
  ;Ausrichtung Ende...
Endif


Theoretisch sollte wenn das Schiff dann ausgerichtet ist, die Winkeldifferenz 0 sein. Ich habe die Werte ausgeben lassen, aber die Werte lagen z.bsp. bei 0.8372 usw..

Dann hab ich es noch mit TFormVector versucht mit Hilfe eines Pivots:

Code: [AUSKLAPPEN]

AlignToVector ship,entityx(planet),entityy(planet),entityz(planet),0.1

TFormVector 0,0,1,ship,0
x# = TFormedX()
y# = TFormedY()
z# = TFormedZ()

p = CreatePivot()
PositionEntity p,entityx(ship),entityy(ship),entityz(ship)
PointEntity p,planet

TFormVector 0,0,1,p,0

If x# = TFormedX() and y# = TFormedY() and z# = TFormedZ()
  ;Ausrichtung Ende
Endif

FreeEntity p


So ging es jedoch auch nicht. Aber die Vektoren sollten doch am Ende identisch sein wenn das Schiff ausgerichtet ist?


Kann es sein das AlignToVector nicht so genau ist wie PointEntity?

Jolinah

BeitragSa, Jan 31, 2004 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt hab ich es auch noch mit VectorPitch#() und VectorYaw#() versucht.
Die Funktionen geben den Absoluten Winkel zurück.

Aber auch da kam ich wieder auf ein schlechtes Ergebnis:

Berechneter Winkel mit VectorPitch() = -22.6022
Winkel nach ausrichten mit AlignToVector = -21.7042
 

IonPainter

BeitragSa, Jan 31, 2004 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte sehr...

Code: [AUSKLAPPEN]

Graphics3D 640,480,16,2
SetBuffer BackBuffer()

Kamera = CreateCamera()
Licht = CreateLight()

PositionEntity Kamera, 0, 0, -5
RotateEntity Licht ,90 , 0, 0

objekt1=CreateCylinder(20)
objekt2=CreateSphere()
RotateMesh objekt1,90,0,0
ScaleEntity objekt1,1,1,3
PositionEntity objekt1,0,0,5

EntityAlpha objekt2,.8
EntityColor objekt2,255,100,100

Frametimer=CreateTimer(30)

While Not KeyHit(1)
   If KeyDown(200) Then MoveEntity objekt2,0,.1,0
   If KeyDown(208) Then MoveEntity objekt2,0,-.1,0
   If KeyDown(203) Then MoveEntity objekt2,-.1,0,0
   If KeyDown(205) Then MoveEntity objekt2,.1,0,0


   MyPointEntity(Objekt1, Objekt2, 5)
   
      

   UpdateWorld()
     RenderWorld()

   ;Die 0.001 ist die Genauigkeit... kleiner = genauer
   If Abs(DeltaYaw(objekt1,objekt2)) < 0.001 And Abs(DeltaPitch(objekt1, objekt2)) < 0.001 Then
      Text 100, 100, "AUSRICHTUNG FERTIG"
   EndIf
   
   WaitTimer Frametimer
   Flip(0)
Wend
End


Function MyPointEntity(x_objekt1, x_objekt2, Abstufungen = 0)

   If Abstufungen > 1 Then

      Pitch# = EntityPitch(x_Objekt1)
      Yaw# = EntityYaw(x_Objekt1)
   
      NeuPitch# = Pitch# + (DeltaPitch(x_Objekt1, x_Objekt2) / Abstufungen)
      NeuYaw# = Yaw# + (DeltaYaw(x_Objekt1, x_Objekt2) / Abstufungen)

   Else

      NeuPitch# = EntityPitch(x_objekt1) + DeltaPitch(x_objekt1,x_objekt2)
      NeuYaw# = EntityYaw(x_objekt1) + DeltaYaw(x_objekt1,x_objekt2)

   EndIf
   
   RotateEntity (x_objekt1, NeuPitch#, NeuYaw#, EntityRoll(x_objekt1))

End Function


credit me Razz

Jolinah

BeitragSo, Feb 01, 2004 2:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Ion Wink

Dann scheint aber AlignToVector nicht so genau zu sein?
Mit dem Befehl kam ich einfach nie in ne Genauigkeit von 0.001

War immer 0.8 oder mehr *g*

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group