Sprite in X / Y verzerren

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Ara
Beiträge: 35
Registriert: 29.08.2004 13:40

Sprite in X / Y verzerren

Beitrag 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.
Win11 Pro
PureBasic 6.10 LTS
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: Sprite in X / Y verzerren

Beitrag 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
 
Ara
Beiträge: 35
Registriert: 29.08.2004 13:40

Re: Sprite in X / Y verzerren

Beitrag 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
Win11 Pro
PureBasic 6.10 LTS
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: Sprite in X / Y verzerren

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