Ich möchste ein Sprite3D um einen Punkt außerhalb des Sprites drehen. gibt es dafür eine Funktion oder muss ich X und Y extra Berechnen?
Danke für Antworten

Code: Alles auswählen
InitSprite()
InitSprite3D()
Procedure DisplayTransformedSprite3D(Sprite3D.i, x.f, y.f, Width.f, Height.f, Angle.f, xShift.f, yShift.f, Transparency.i)
Protected r.f = Sqr(Width*Width+Height*Height)/2 ; Radius
Protected t.f = ATan(Width/Height) ; Tau
Angle = Radian(Angle)
Protected a1.f = Angle - t
Protected a2.f = Angle + t
Protected a3.f = Angle + #PI - t
Protected a4.f = Angle + #PI + t
TransformSprite3D(Sprite3D, Cos(a1)*r, Sin(a1)*r, Cos(a2)*r, Sin(a2)*r, Cos(a3)*r, Sin(a3)*r, Cos(a4)*r, Sin(a4)*r)
DisplaySprite3D(Sprite3D, x-Cos(Angle)*yShift+Sin(Angle)*xShift, y-Sin(Angle)*yShift-Cos(Angle)*xShift, Transparency)
EndProcedure
OpenWindow(0, 0, 0, 800, 600, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
CreateSprite(0, 256, 256, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(0))
Box(0,0,256,256,$FFFFFF)
Circle(128,0,16,$008000)
Circle(128,256,64,$000080)
StopDrawing()
CreateSprite3D(0,0)
Repeat
Event = WindowEvent()
ClearScreen(0)
Angle.f + 1
Start3D()
DisplayTransformedSprite3D(0, 64, 64, 128, 128, 0, 0, 0, 255)
DisplayTransformedSprite3D(0, 400, 300, 128, 256, Angle, 0, 128, 128)
Stop3D()
FlipBuffers()
Until Event = #PB_Event_CloseWindow