Pinsel

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

blitzuser34

Betreff: Pinsel

BeitragSa, Dez 06, 2008 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

schaut euch einfach folgenden Code an:

Code: [AUSKLAPPEN]
Graphics 400,300,32,2
AppTitle "Pinsel"

Dim pinsel(50)

For a=1 To 50
   pinsel(a)=CreateImage(102,102)
   SetBuffer ImageBuffer(pinsel(a))
   Color 255,255,255
   Plot 51,51
      For y=1 To a
         For x#=0 To 360 Step 0.5
            newx#=Sin(x#)*y
            newy#=Cos(x#)*y
            faktorx#=255/a
               Color 255-y*faktorx#,255-y*faktorx#,255-y*faktorx#
               Plot 51+newx#,51+newy#
         Next
      Next
Next

SetBuffer BackBuffer()

a=1

Repeat
   If KeyHit(1) Then End
   Cls
   
   Delay 100
   
   DrawImage pinsel(a),400/2-51,300/2-51
   a=a+1
   If a=51 Then a=1
   
   Flip
Forever


Gegen Ende sind teilweiße 2-3 Bilder gleich. Wieso? Das merkt man auch an dem "Ruckeln" gegen Ende.

Blitzuser34

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Dez 06, 2008 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach Code: [AUSKLAPPEN]
         faktorx#=255.0/a
denn dann gehts.

Im übrigen hoffe ich, dass du die User nicht mit so langen Berechnungszeiten gängeln willst. Bereits mit WritePixelFast sollte es so um 100mal schneller gehen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xeres

Moderator

BeitragSa, Dez 06, 2008 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
a und y sind z.B. Interger.
Code: [AUSKLAPPEN]
faktorx#=255/a
sollte eher
Code: [AUSKLAPPEN]
faktorx#=255.0/Float(a)
heißen...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Dez 06, 2008 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich konnte es mir nicht länger ansehen. Somit hier eine etwas schnellere Variante:

Code: [AUSKLAPPEN]
Graphics 400,300,32,2
AppTitle "Pinsel"

Local Pinsel%

Local Frame%
Local Radius#
Local Entfernung#
Local Farbe%
Local X%,Y%

Pinsel=CreateImage(102,102,50)


For Frame=0 To 49
   
   Radius=Frame
   
   LockBuffer ImageBuffer(Pinsel,Frame)
   
   For Y=0 To 101
      For X=0 To 101
         Entfernung=Sqr((51-X)^2+(51-Y)^2)
         If Entfernung<Radius Then
            Farbe=Entfernung*255/Radius
            Farbe=-1-Farbe-Farbe*$100-Farbe*$10000
         Else
            Farbe=0
         End If
         
         WritePixelFast X,Y,Farbe,ImageBuffer(Pinsel,Frame)
      Next
   Next
   
   UnlockBuffer ImageBuffer(Pinsel,Frame)
   
Next

SetBuffer BackBuffer()




Frame=0

Repeat
   If KeyHit(1) Then End
   Cls
   
   Delay 10
   
   DrawImage Pinsel,400/2-51,300/2-51,Frame
   Frame=Frame+1
   If Frame=50 Then Frame=0
   
   Flip
Forever
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

TimBo

BeitragSa, Dez 06, 2008 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ohne Delay mit Timer

und was ich ned gecheckt habe radius = frame
super da kann man auch eine Var. weglassen.

Hier meine Verbesserung von Hectics Verbesserung von blitzuser

Code: [AUSKLAPPEN]
Graphics 400,300,32,2
AppTitle "Pinsel"
timer = CreateTimer(60)

Local Pinsel%

Local Frame%
Local Radius#
Local Entfernung#
Local Farbe%
Local X%,Y%

Pinsel=CreateImage(102,102,50)


For Radius=0 To 49
   LockBuffer ImageBuffer(Pinsel,Radius)
    For Y=0 To 101
      For X=0 To 101
         Entfernung=Sqr((51-X)^2+(51-Y)^2)
         If Entfernung<Radius Then
            Farbe=Entfernung*255/Radius
            Farbe=-1-Farbe-Farbe*$100-Farbe*$10000
         Else
            Farbe=0
         End If
         
         WritePixelFast X,Y,Farbe,ImageBuffer(Pinsel,Radius)
      Next
   Next
   UnlockBuffer ImageBuffer(Pinsel,Radius)
Next





SetBuffer BackBuffer()




Frame=0

Repeat
   If KeyHit(1) Then End
   
   DrawImage Pinsel,400/2-51,300/2-51,Frame
   Frame=Frame+1
   If Frame=50 Then Frame=0
   
   Flip(0) :Cls
   WaitTimer(timer)
Until KeyHit(1)
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Dez 06, 2008 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, stimmt, das Delay habe ich komplett ignoriert. Ist so auf jeden Fall besser. Das Radius=Frame habe ich so gelassen, da in den speziellen Falle beides die gleichen Werte haben aber in anderen Fällen nicht unbedingt sein müssen. So könnte man auch Radius=Frame*2 machen, was zwar wenig Sinn ergibt, dafür aber die Variablennamen so eingesetzt werden wie sie auch heissen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

TimBo

BeitragSa, Dez 06, 2008 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

achso, dass habe ich garnicht bedacht. Embarassed
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

blitzuser34

BeitragSo, Dez 07, 2008 10:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code sollte eh nicht im Spiel ausgeführt werden. Deshalb musste er nicht sehr schnell sein.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Dez 07, 2008 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Sollte ja keine Anmache sein. Doch dein Code erzeugt maximale Farbabstufungen wie groß der aktuelle Radius ist. In deinem Fall dann eben 50 Farbabstufungen anstelle 255 möglichen. Aus welchen Grund dann sichtbare Treppeneffekte auftretten. Wie wichtig nun ein sauberes Image ist, bleibt ja dir überlassen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

blitzuser34

BeitragSo, Dez 07, 2008 11:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, die Treppeneffekte habe ich gesehen. Fand sie selber nicht sehr schön.

Der Code von dir ist schon besser.

Außerdem will ich eigentlich die Werte als Float zwischen 0 und 1 ausgeben, statt zu zeichnen:

Code: [AUSKLAPPEN]
Graphics 400,300,32,3
AppTitle "Pinsel"
timer = CreateTimer(60)

Local Pinsel%

Local Frame%
Local Radius#
Local Entfernung#
Local Farbe%
Local X%,Y%

Pinsel=CreateImage(102,102,50)

fileout=WriteFile("fileout.dat")

For Radius=0 To 49
   LockBuffer ImageBuffer(Pinsel,Radius)
      For Y=0 To 101
         For X=0 To 101
            Entfernung=Sqr((51-X)^2+(51-Y)^2)
            
            If Entfernung<Radius Then
               Farbe=Entfernung*255/Radius
               Farbe=-1-Farbe-Farbe*$100-Farbe*$10000
            Else
               Farbe=0
            End If
            rgb=Farbe
            r# = (rgb And $FF0000) / $10000
            r#=r#*0.003921568627
            WriteFloat fileout,r#
         Next
      Next
   UnlockBuffer ImageBuffer(Pinsel,Radius)
Next

CloseFile fileout

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group