Seite 1 von 1

Sprite3D Origin

Verfasst: 24.07.2010 16:35
von famous
hey ^__^

mit RotateSprite3D kann ein Sprite3D zwar gedreht werden, aber ich möchte in einem Sprite
den Uhrsprungspunkt eingeben können von dem aus rotiert wird.

Gibt es dafür evtl eine routine?

Re: Sprite3D Origin

Verfasst: 24.07.2010 16:39
von TomS
Du musst dein Sprite danach nur um die Strecke MeinDrehpunkt_alt-MeinDrehpunkt_neu verschieben.

Re: Sprite3D Origin

Verfasst: 24.07.2010 16:39
von STARGÅTE

Code: Alles auswählen

InitSprite()
InitSprite3D()

OpenWindow(0, 0, 0, 800, 600, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)

CreateSprite(1, 256, 256,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(1))
  Box(0,0,128,128,$FF0000)
  Box(128,0,128,128,$00FF00)
  Box(0,128,128,128,$0000FF)
  Box(128,128,128,128,$00FFFF)
StopDrawing()
CreateSprite3D(1,1)

Repeat

Event = WindowEvent()

ClearScreen(0)

Angle.f+0.02

Start3D()

  RotateSprite3D(1, Degree(Angle), 0)
  DisplaySprite3D(1, 128, 128) ; no shift, roate at center
  dx = 128 : dy = 128 ; Shift to a corner
  DisplaySprite3D(1, 384+Cos(Angle)*dx-Sin(Angle)*dy, 128+Sin(Angle)*dx+Cos(Angle)*dy) ; with shift

Stop3D()

FlipBuffers()

Until Event = #PB_Event_CloseWindow
einfach mittels Cos und Sin die Koordinaten des DesplaySprite3D verschieben.

Re: Sprite3D Origin

Verfasst: 24.07.2010 16:43
von famous
STARGÅTE hat geschrieben:

Code: Alles auswählen

InitSprite()
InitSprite3D()

OpenWindow(0, 0, 0, 800, 600, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)

CreateSprite(1, 256, 256,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(1))
  Box(0,0,128,128,$FF0000)
  Box(128,0,128,128,$00FF00)
  Box(0,128,128,128,$0000FF)
  Box(128,128,128,128,$00FFFF)
StopDrawing()
CreateSprite3D(1,1)

Repeat

Event = WindowEvent()

ClearScreen(0)

Angle.f+0.02

Start3D()

  RotateSprite3D(1, Degree(Angle), 0)
  DisplaySprite3D(1, 128, 128) ; no shift, roate at center
  dx = 128 : dy = 128 ; Shift to a corner
  DisplaySprite3D(1, 384+Cos(Angle)*dx-Sin(Angle)*dy, 128+Sin(Angle)*dx+Cos(Angle)*dy) ; with shift

Stop3D()

FlipBuffers()

Until Event = #PB_Event_CloseWindow
einfach mittels Cos und Sin die Koordinaten des DesplaySprite3D verschieben.
sin cos..ich vergaß ^^
dankesehr