Sprite3D Origin

Für allgemeine Fragen zur Programmierung mit PureBasic.
famous
Beiträge: 31
Registriert: 07.01.2010 16:58

Sprite3D Origin

Beitrag 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?
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Sprite3D Origin

Beitrag von TomS »

Du musst dein Sprite danach nur um die Strecke MeinDrehpunkt_alt-MeinDrehpunkt_neu verschieben.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sprite3D Origin

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
famous
Beiträge: 31
Registriert: 07.01.2010 16:58

Re: Sprite3D Origin

Beitrag 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
Antworten