Seite 1 von 1

Sprite in X / Y verzerren

Verfasst: 14.12.2022 11:30
von Ara
Es gab vor sehr langer Zeit einmal eine Demo, bei der ein Sprite in X und Y verzerrt wurde.
Hier wurde der Befehl UseBuffer benutzt, den es leider nicht mehr gibt.

Ein Ausschnitt aus dem alten Demo.

Code: Alles auswählen

  UseBuffer(#ID_Buffer2)                                      ; Display the x/y waving logo
  For i=0 To 620                                             ; from ID_Sprite2 to ID_Buffer2 with y deforming (620 lines y)
    ClipSprite(#ID_Sprite2,i,0,1,160) 
    DisplaySprite(#ID_Sprite2,i,gsin(i+angle)*20)
  Next
  UseBuffer(-1)

  For i=0 To 200                                             ; and from ID_Buffer2 with x deforming to Screen (200 lines x)
    help1+1
    If help1>360:help1=0:EndIf                               ; simple! Isn't it ?
    ClipSprite(#ID_Buffer2,0,i,640,1)
    DisplayTransparentSprite(#ID_Buffer2,5+gsin(angle+i*2)*23,10+i)
  Next
Den kompletten Code habe ich hier gefunden. Der Link stammt nicht von mir.

Wie würdet ihr den Effekt in der Aktuellen PureBasic Version umsetzen, wenn es möglich ist.

Schon einmal Danke für Informative Hilfe.

Re: Sprite in X / Y verzerren

Verfasst: 14.12.2022 13:52
von Benubi
Ja mir fehlt der Befehl auch seit ner Weile. Ich hatte mir eine ziemlich umfangreiche Fullscreen GUI geschrieben noch vor CEGUI in der 3D Engine implementiert wurde. Als der Befehl ausfiehl versuchte ich erst mit Images, aber die waren damals zu langsam.

Ich bin jetzt kein Experte, aber ich denke man kann mit ClipSprite() und TransformSprite() jeden gewünschten Effekt reproduzieren, aber es ist dann wohl umständlicher es richtig zu berechnen.

So könntest Du das reproduzieren, möglicherweise. Zuerst benutzt den Screen als "Outputsprite" und dann machst Du ein GrabSprite(). Ich probiere es mal. Leider ist dein Code unvollständig, daher nur in "Pseudo-Code":

Code: Alles auswählen

  ClearScreen(0) ; 1es mal clearscreen um das "Buffer Sprite" zu malen
  ;UseBuffer(#ID_Buffer2)                                      ; Display the x/y waving logo
  For i=0 To 620                                             ; from ID_Sprite2 to ID_Buffer2 with y deforming (620 lines y)
    ClipSprite(#ID_Sprite2,i,0,1,160) 
    DisplaySprite(#ID_Sprite2,i,gsin(i+angle)*20)
  Next
  GrabSprite(#ID_Buffer2,fehlt,fehlt,fehlt,fehlt) ; Buffer Sprite erstellen
  
  ;UseBuffer(-1) ; 
ClearScreen(0) ; 2es mal clearscreen
  For i=0 To 200                                             ; and from ID_Buffer2 with x deforming to Screen (200 lines x)
    help1+1
    If help1>360:help1=0:EndIf                               ; simple! Isn't it ?
    ClipSprite(#ID_Buffer2,0,i,640,1)
    DisplayTransparentSprite(#ID_Buffer2,5+gsin(angle+i*2)*23,10+i)
  Next
 

Re: Sprite in X / Y verzerren

Verfasst: 14.12.2022 15:25
von Ara
Danke, das klappt wunderbar.
Weiter oben ist ein Link, da bekommt man es komplett mit Grafiken als zip Datei.
Es ist aber sehr alt, letzte Version ist für PureBasic 3.62

Viele Grüße
Thomas

Re: Sprite in X / Y verzerren

Verfasst: 14.12.2022 22:19
von Benubi
Cool! :allright:

Mir fällt ein man könnte auch ein gleichgroßes "Solid" Sprite an Stelle von ClearScreen() benutzen, um den Arbeitsplatz für das Sprite aus zu radieren. ScreenOutput() mit Box() ist für so eine Operation zu langsam bzw. verschwenderisch, insbesondere über OpenGL.