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:

Subpixelschnee (mal was zum optimieren für euch :-) )

 
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
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 25.01.2009, 21:32    Titel: Subpixelschnee (mal was zum optimieren für euch :-) ) Antworten mit Zitat

Es soll folgender maßen laufen:
Schnee fällt von oben. Dabei ist jede schneeflocke in subpixel. also verdreifacht sich die auflösung.
Ich habe hier 2 funktionen die den umgang mit subpixel vereinfachen.
spset(x,y,c) setzt einen subpixel an der position x,y.
spoint(x,y) gibt an ob ein subpixel gesetzt ist und mit welchem wert.
vielleicht kann der eine oder andere die funktionen noch optimieren. ich bin froh das ich das grade noch so mit meinen mathe-kenntnissen hinbekommen hab.

Schaut lustig und vor allem sehr bunt aus happy

Code:

sub spset(x as integer,y as integer,c as ubyte)
    dim as integer rx,ry = y
    dim as ubyte r,g,b
    dim oc as uinteger
    dim cc as ubyte = (x mod 3)
    rx = x \ 3 + iif(cc>0,1,0)
    oc = point(rx,ry)
    r = oc SHR 16: g = oc SHR 8: b = oc
    select case cc
    case 1
        r = c
    case 2
        g = c
    case 0
        b = c
    end select
    pset(rx,ry), rgb(r,g,b)
end sub

function spoint(x as integer,y as integer)  as ubyte
    dim as integer rx,ry = y
    dim as ubyte r,g,b
    dim oc as uinteger
    dim cc as ubyte = (x mod 3)
    rx = x \ 3 + iif(cc>0,1,0)
    oc = point(rx,ry)
    r = oc SHR 16: g = oc SHR 8: b = oc
    select case cc
    case 1
        return r
    case 2
        return g
    case 0
        return b
    end select
end function

dim snow(1 to 1000,1 to 3) as integer
dim snowcount as integer
dim as integer sx,sy
dim t as ubyte
dim in as string
screen 19,32,1
screeninfo sx,sy
line(0,0)-(sx,sy),RGB(255,255,255),B
sx = sx * 3
    do
        in = inkey
        if int(rnd*100) > 50 and snowcount < 1000 then
            snowcount = snowcount +1
            snow(snowcount,1) = int(rnd*(sx-3))+3
            snow(snowcount,2) = 1
        end if
        screenlock
        for i as integer = 1 to snowcount
            if snow(i,3) = 4 then snow(i,2) = 2 : snow(i,3) = 0
            t = spoint(snow(i,1), snow(i,2) +1)
            if t = 0 then
                spset(snow(i,1),snow(i,2),0)
                snow(i,2) += 1
                spset(snow(i,1),snow(i,2),255)
            else
                t = spoint(snow(i,1)+1, snow(i,2) +1)
                if t = 0 then
                    spset(snow(i,1),snow(i,2),0)
                    snow(i,2) += 1:snow(i,1) += 1
                    spset(snow(i,1),snow(i,2),255)
                else
                    t = spoint(snow(i,1)-1, snow(i,2) +1)
                    if t = 0 then
                        spset(snow(i,1),snow(i,2),0)
                        snow(i,2) += 1:snow(i,1) -= 1
                        spset(snow(i,1),snow(i,2),255)
                    else
                        snow(i,3) += 1
                    end if
                end if
            end if
        next
        screenunlock
        'screensync
    loop until in <> ""
sleep



Zuletzt bearbeitet von OneCypher am 25.01.2009, 22:19, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 25.01.2009, 21:51    Titel: Antworten mit Zitat

Ist das Absicht, dass am Linken Rand (fast) keine Schneeflocken fallen und diese zuerst in einer schönen Geraden nach rechts ansteigen?

Leider kenne ich mich mit dieser Subpixel-Technik noch nicht so gut aus, dass ich etwas optimieren könnte.

Übrigens Screenshot:

_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 25.01.2009, 22:20    Titel: Antworten mit Zitat

@ St_W: Sorry, ja habs auch nach ein paar minuten festgestellt das an der ecke was schief läuft. habs korregiert! Da sollte ein weisser kasten drumgemalt werden damit die schneeflocken nicht irgendwo raustropfen..

Hab den Quelltext entsprechend geändert, einfach noch mal probieren!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 26.01.2009, 15:05    Titel: Antworten mit Zitat

sonst keiner eine Idee?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 26.01.2009, 15:14    Titel: Antworten mit Zitat

Mir sagt die ganze Thematik nichts, tut mir leid.
_________________
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
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 26.01.2009, 17:05    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:
sonst keiner eine Idee?

Doch
Subpixel kannste nicht Weiß machen, das liegt in der Natur der Sache. Ergo kannst du keinen subpixel-schnee fallen lassen, aber du kannst schnee in ganzen pixel fallen lassen und danach in einzelne subpixel zerlegen, um die auflösung der schnee-haufen zu verbessern.
Allerdings besteht immer die gefahr von buten kanten.

/edit:
Und nen sleep 1 im code wäre ganz cool so...
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 27.01.2009, 14:30    Titel: Antworten mit Zitat

The_Muh hat Folgendes geschrieben:
buten kanten.

Häää- "Außenkanten"? geschockt Seet wann snackt wi plattdüütsch op QBasic.at ?
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 27.01.2009, 16:25    Titel: Antworten mit Zitat

jo, jo dat! aber dat mit den buten und binnen is me he zu weid owen...

me san he in kölle am rinn, do wohd aners jeschwätz... deswejen verstunn isch eusch uch su schläsch!
Su, nu lossma dat sinn und lawern widdo in basic...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 27.01.2009, 18:57    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
The_Muh hat Folgendes geschrieben:
buten kanten.

Häää- "Außenkanten"? geschockt Seet wann snackt wi plattdüütsch op QBasic.at ?

Sry, sollte "Bunte Kanten" heißen.
lächeln
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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