Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Animationen Programmieren - leichter als gedacht ;)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 13.07.2007, 23:27    Titel: Animationen Programmieren - leichter als gedacht ;) Antworten mit Zitat

Das muster erzeut ein Muster, mit Licht und 3d und alles nur durch berechnung der Farbe zwinkern

Code:
dim as integer w,h,x,y,farbe,u
screen 14,32
screeninfo w,h
print w,h
DO
u+=1
FOR x=0 to w
    for y=0 to h
        farbe=x*u^2/(y*16)
        pset (x,y),farbe
    next
next
sleep 1
LOOP until inkey=chr(27)

wenn es doch nur einen weg gäbe ihn auch noch unter screen 21 flüssig laufen zu lassen lachen


Zuletzt bearbeitet von AndT am 13.07.2007, 23:40, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 13.07.2007, 23:31    Titel: Antworten mit Zitat

lol, das hatte ich auch mal gebaut bei dem Versuch, nen Plasmaeffekt zu bauen... ist aber leider nix geworden happy

Hiermit haben wir sogar ne 3D-Kante happy
Code:
dim as integer w,h,x,y,farbe,u
screen 14,32
screeninfo w,h
print w,h
DO
u+=1
FOR x=0 to w
    for y=0 to h
        farbe=x*u^2/(y*16) + y*u^2/(x*16) / 2
        pset (x,y),farbe
    next
next
sleep 1
LOOP
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 13.07.2007, 23:37    Titel: Antworten mit Zitat

Bei DO...LOOP wäre eine Abbruchbedingung nicht verkehrt. zwinkern
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 13.07.2007, 23:47    Titel: Antworten mit Zitat

Und noch ein cooler Effekt zwinkern
Code:
ddim as integer w,h,x,y,farbe
dim as double u
screen 14,32
screeninfo w,h
print w,h
DO
u+=1
screenlock
FOR x=0 to w
    for y=0 to h
        farbe=u^2+(x*y)
        pset (x,y),farbe
    next
next
sleep 1
screenunlock
LOOP until inkey=chr(27)

///
Edit:
Funktionsweise:
es werden einfach Pixel gezeichnet, welche von links nach rechts laufen.
screeninfo sorgt dafür, dass das gleiche Resultat auch > screen 14 entsteht.
Was dafür sorgt, dass Bewegung ins Spiel kommt ist "u". Wenn u jetzt zb 64 wäre, ändern dich die Farben auch schneller.
Die Formel ist ein "Farbe" geschrieben und kann nach beliben verändert werden.
Diese "Engine" ist schnell genug um damit 3D zeichnen zu können zwinkern


Zuletzt bearbeitet von AndT am 14.07.2007, 00:01, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 13.07.2007, 23:50    Titel: Antworten mit Zitat

jo, den hatte ich auch schon bei dem Versuch einen Plasmaeffekt zu bauen happy
Wie gesagt, daraus ist leider nie was geworden... obwohl, ich hab ja eine CPP-Vorlage zwinkern
Hm
Aber momentan steht eine andere CPP->FB-Übersetzung an peinlich
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 14.07.2007, 00:01    Titel: Antworten mit Zitat

Haste villeicht nen Screenshot davon?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 14.07.2007, 00:10    Titel: Antworten mit Zitat

Von dem Plasmaeffekt?
Nur wie er egtl. aussehen sollte:
(grobaufgelöst)

wobei die andern, die man hier findet, auch nicht schlecht aussehen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 14.07.2007, 00:20    Titel: Antworten mit Zitat

Sowas kann nur mit RGB gehen zwinkern
so ist mit rgb auch 3d möglich:
Code:
dim as integer w,h,x,y,farbe
dim as double u
screen 14,32
screeninfo w,h
print w,h
u=64
DO
u+=4
screenlock
FOR x=0 to w
    for y=0 to h
    farbe=rgb(x*u/255,y*u/255,x*u/255)
    pset (x+1,y+1),farbe
    next
next
sleep 1
screenunlock
LOOP until inkey=chr(27)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 14.07.2007, 00:37    Titel: Antworten mit Zitat

kurze Frage: Was ist daran 3D?
Das ist nur 2D-Zoom was ich da seh happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 14.07.2007, 00:47    Titel: Antworten mit Zitat

egal... wenn ich nen weg gefunden hab den efeckt hinzukriegen, poste ich das genau hier zwinkern
Dieser Code müsste so stark anpassbar sein, dass er den Zweck erfüllt zwinkern
Code:
dim as integer w,h,x,y,farbe
dim as integer rt,gr,bl
dim as integer mode_rt,mode_gr,mode_bl
dim as double u,wfr,wfg,wfb
dim as integer rtad,grad,blad
screen 14,32
screeninfo w,h
print w,h
u=64
u+=16
screenlock
rtad=1
grad=rtad
blad=rtad
DO
FOR x=0 to w
    for y=0 to h
    wfr+=.1
    wfb+=.1
    wfg+=.1
   
    ' Funktion für Rot
    if wfr > 1000 then
        if mode_rt=1 then
        rt+=rtad : wfr = 0:mode_rt=1
    else
    rt-=rtad : wfr = 0
    end if
    end if
    ' Funktion für Blau
    if wfb > 1000 then
    if mode_bl=1 then   
        bl+=grad : wfb = 0:mode_bl=1
    else
        bl-=blad : wfb = 0
    end if
    end if
    ' Funktion für Grün
    IF wfg > 1000 then
    if mode_gr=1 then
    gr+=grad : wfg = 0:mode_gr=1
else
    gr-=grad : wfg = 0
end if
end if
    if rt< 2 then mode_rt=1
    if bl< 2 then mode_bl=1
    if gr< 2 then mode_gr=1
    if rt = 255 then mode_rt=0
    if bl= 255 then mode_bl=0
    if gr= 255 then mode_gr=0
   
    farbe=rgb(rt,gr,bl)
    pset (x+0,y+0),farbe
    next
next
sleep 1
screenunlock
LOOP until inkey=chr(27)
sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 14.07.2007, 01:48    Titel: Antworten mit Zitat

oO?
Wieso machst du das mit PSet und nicht mit Line ()-(),,BF?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 14.07.2007, 09:12    Titel: Antworten mit Zitat

Ich hab was gefunden...
http://www.freebasic.net/forum/viewtopic.php?t=8758&highlight=plasma

Hochauflösends Plasma geht mit
Code:
GenPlasma 1280,1024,ri(256),ri(256),ri(256),ri(256),300,8,0.001


/// Edit
Ich hab daraus übrigens einen ScreenSaver gemacht zwinkern

Code:
Dim Shared As Integer Grad(0 To 255)


'+=============================================================+
Sub Rainbow()
    Dim As Integer i, b, badd, g, gadd, r, radd, rx, gx, bx
    rx =  2
    gx = -2
    bx = -2
    b=Int(Rnd * 256):badd= bx
    g=Int(Rnd * 256):gadd= gx
    r=Int(Rnd * 256):radd= rx
    For i = 0 To 255
        b += badd
        g += gadd
        r += radd
        If b < 0   Then badd = -bx: b = 0
        If b > 255 Then badd =  bx: b = 255
        If g < 0   Then gadd = -gx: g = 0
        If g > 255 Then gadd =  gx: g = 255
        If r > 255 Then radd = -rx: r = 255
        If r < 0   Then radd =  rx: r = 0
        Grad(i) = RGB(r,g,b)
    Next i
End Sub
'+==============+MAKE THIS WHATEVER YOU WANT : )+==============+


Rainbow


Sub GenPlasma(Byval w     As Integer, Byval h     As Integer, _
              Byval crnr1 As Integer, Byval crnr2 As Integer, _
              Byval crnr3 As Integer, Byval crnr4 As Integer, _
              Byval rough As Integer, Byval iter  As Integer, _
              Byval prs   As Double)
    Dim As Double prex, prey, d1, d2, d3, d4, hr, fv, Image(0 To w,0 To h)
    hr = rough * 2
    prex = w / 2: prey = h / 2
    Image(0,0)=crnr1
    Image(w,0)=crnr2: d1 = (crnr1+crnr2) / 2: Image(prex,0)=d1
    Image(w,h)=crnr3: d2 = (crnr2+crnr3) / 2: Image(w,prey)=d2
    Image(0,h)=crnr4: d3 = (crnr3+crnr4) / 2: Image(prex,h)=d3
                      d4 = (crnr4+crnr1) / 2: Image(0,prey)=d4
    fv = ((d1+d2+d3+d4) / 4) + (Int(Rnd * hr) - rough)
    If fv>255 Then
        fv=255
    Elseif fv<0 Then
        fv=0
    Endif
    Image(Cint(prex),Cint(prey))=fv
    Dim As Double divisor, mdivx, mdivy, i, xs, ys, c1,c2,c3,c4, cx,cy, dx,dy
    mdivx = w / 2: mdivy = h / 2
    w -= 1: h -= 1
    For i = 1 To iter
        For ys = 0 To h Step mdivy
            For xs = 0 To w Step mdivx
                prex = mdivx / 2: prey = mdivy / 2
                cx   = xs + mdivx : cy   = ys + mdivy
                c1 = Image(Cint(xs),Cint(ys)): c2 = Image(Cint(cx),Cint(ys))
                c3 = Image(Cint(cx),Cint(cy)): c4 = Image(Cint(xs),Cint(cy))
                d1 = (c1+c2) / 2: d2 = (c2+c3) / 2
                d3 = (c3+c4) / 2: d4 = (c4+c1) / 2
                dx = xs + prex: dy = ys + prey
                Image(Cint(dx),Cint(ys))=d1
                Image(Cint(cx),Cint(dy))=d2
                Image(Cint(dx),Cint(cy))=d3
                Image(Cint(xs),Cint(dy))=d4
                fv = ((d1+d2+d3+d4) / 4) + (Int(Rnd * hr) - rough)
                If fv>255 Then
                    fv=255
                Elseif fv<0 Then
                    fv=0
                Endif
                Image(Cint(dx),Cint(dy))=fv
            Next xs
        Next ys
        mdivx = mdivx / 2
        mdivy = mdivy / 2
        hr    = rough
        rough = rough * prs
        screenlock
        For ys = 0 To h Step mdivy
            For xs = 0 To w Step mdivx
                Line (xs,ys)-(xs+mdivx,ys+mdivy), Grad(Image(xs,ys)), BF
            Next xs
        Next ys
        screenunlock
    Next i
End Sub



'test code

'#Include "fbgfx.bi"
'Using FB
#define ri(x) (Int(Rnd*x))
Screenres 1280,1024,32
Randomize Timer
dim as integer p1,p2,p3,p4,p5,p6

P6=9.2
Do
    Rainbow
P5=INT(RND*255)

p1+=1
if p1 > 10 then p2+=1 :p1=0

if p2 > 20 then p3+=2 :p2=0

if p3 > 30 then p4+=3 :p3=0
if p4 > 40 then p4 =0: p1=0

GenPlasma 1280,1024,p1,p2,p3,p4,p5,p6,.001
   Loop until inkey=chr(27)
 

Viel Spass damit zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.07.2007, 01:26    Titel: Antworten mit Zitat

sieht recht hübsch aus - so langsam können wir als community unsere erste demo releasen durchgeknallt ob die bei pouet dann angenommen wird... achne, die präsentiere ich nächstes jahr auf der breakpoint! lachen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz