Structuren met ruisfuncties maken

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Als u de weergave van een bitmap wilt wijzigen, kunt u hierop een ruiseffect toepassen met de methode noise() of perlinNoise(). Een ruiseffect kan worden vergeleken met het beeld van een nog niet afgestelde televisie.

Als u een ruiseffect op een bitmap wilt toepassen, gebruikt u de methode noise(). Met deze methode wordt een willekeurige kleurwaarde toegepast op de pixels in een opgegeven gebied van een bitmapafbeelding.

Deze methode accepteert vijf parameters:

  • randomSeed (int): het willekeurige zaadgetal waarmee het patroon wordt bepaald. Ondanks de naam levert dit getal dezelfde resultaten op als wanneer hetzelfde getal wordt doorgegeven. Voor een echt willekeurig resultaat moet u de methode Math.random() gebruiken om een willekeurig getal door te geven voor deze parameter.

  • low (uint): deze parameter verwijst naar de laagste waarde die voor elk kanaal (0 tot en met 255) moet worden gegenereerd. De standaardwaarde is 0. Een lagere instelling resulteert in een donkerder ruispatroon, een hogere instelling in een helderder patroon.

  • high (uint): deze parameter verwijst naar de hoogste waarde die voor elk kanaal (0 tot en met 255) moet worden gegenereerd. De standaardwaarde is 255. Een lagere instelling resulteert in een donkerder ruispatroon, een hogere instelling in een helderder patroon.

  • channelOptions (uint): met deze parameter wordt opgegeven op welk kleurkanaal van het bitmapobject het ruispatroon wordt toegepast. Het getal kan uit een combinatie van elk van de vier ARGB-kleurkanaalwaarden bestaan: De standaardwaarde is 7.

  • grayScale (Boolean): bij true wordt de waarde randomSeed toegepast op de bitmappixels, zodat alle kleuren worden verwijderd uit de afbeelding. Het alfakanaal wordt niet beïnvloed door deze parameter. De standaardwaarde is false.

In het volgende voorbeeld wordt een bitmapafbeelding gemaakt en wordt er een blauw ruispatroon op toegepast:

package 
{ 
    import flash.display.Sprite; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.BitmapDataChannel; 
 
    public class BitmapNoise1 extends Sprite 
    { 
        public function BitmapNoise1() 
        { 
            var myBitmap:BitmapData = new BitmapData(250, 250,false, 0xff000000); 
            myBitmap.noise(500, 0, 255, BitmapDataChannel.BLUE,false); 
            var image:Bitmap = new Bitmap(myBitmap); 
            addChild(image); 
        } 
    } 
}

Als u een meer organische structuur wilt maken, gebruikt u de methode perlinNoise(). De methode perlinNoise() produceert realistische, organische structuren die ideaal zijn voor rook, wolken, water, vuur en zelfs explosies.

Omdat deze wordt gegenereerd door een algoritme, gebruikt de methode perlinNoise() minder geheugen dan op bitmaps gebaseerde structuren. Het kan echter nog steeds invloed hebben om processorgebruik, doordat het uw inhoud vertraagt zodat het scherm langzamer dan de framesnelheid wordt ververst, vooral op oudere computers. Dit wordt voornamelijk veroorzaakt door de drijvende-kommaberekeningen die moeten worden uitgevoerd om de Perlin-ruisalgoritmes te verwerken.

De methode accepteert negen parameters (de eerste zes zijn vereist):

  • baseX (Number): hiermee wordt de x-waarde (grootte) van gemaakte patronen bepaald.

  • baseY (Number): hiermee wordt de y-waarde (grootte) van gemaakte patronen bepaald.

  • numOctaves (uint): aantal octaven of afzonderlijke ruisfuncties dat moet worden gecombineerd om deze ruis te maken. Grote aantallen octaven resulteren in gedetailleerdere afbeeldingen, maar nemen ook meer verwerkingstijd in beslag.

  • randomSeed (int): het willekeurige zaadgetal werkt op exact dezelfde wijze als in de functie noise(). Voor een echt willekeurig resultaat moet u de methode Math.random() gebruiken om een willekeurig getal door te geven voor deze parameter.

  • stitch (Boolean): bij true probeert de methode de overgangsranden van de afbeelding vloeiend te maken om een naadloze structuur te maken voor bitmapvullingstegels.

  • fractalNoise (Boolean): deze parameter heeft betrekking op de randen van de verlopen die worden gegenereerd door de methode. Bij true genereert de methode fractale ruis waarmee de randen van het effect vloeiend worden gemaakt. Bij false wordt er turbulentie gegenereerd. Een afbeelding met turbulentie heeft zichtbare onderbrekingen in het verloop, waardoor het een betere benadering geeft van scherpere visuele effecten, zoals vlammen en golfslag.

  • channelOptions (uint): de parameter channelOptions werkt op exact dezelfde wijze als bij de methode noise(). Met deze parameter wordt opgegeven op welk kleurkanaal (van de bitmap) het ruispatroon wordt toegepast. Het getal kan uit een combinatie van elk van de vier ARGB-kleurkanaalwaarden bestaan: De standaardwaarde is 7.

  • grayScale (Boolean): de parameter grayScale werkt op exact dezelfde wijze als bij de methode noise(). Bij true wordt de waarde randomSeed toegepast op de bitmappixels, zodat alle kleuren worden verwijderd uit de afbeelding. De standaardwaarde is false.

  • offsets (Array): een array van punten die overeenkomen met x- en y-verschuivingen voor elke octaaf. Door de verschuivingswaarden te bewerken, kunt u de lagen van de afbeelding vloeiend verschuiven. Elk punt in de verschuivingsarray heeft invloed op een specifieke octaafruisfunctie. De standaardwaarde is null.

In het volgende voorbeeld wordt een object BitmapData van 150 x 150 pixels gemaakt dat de methode perlinNoise() aanroept om een groen en blauw wolkeneffect te genereren:

package 
{ 
    import flash.display.Sprite; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.BitmapDataChannel; 
 
    public class BitmapNoise2 extends Sprite 
    { 
        public function BitmapNoise2() 
        { 
            var myBitmapDataObject:BitmapData = 
                new BitmapData(150, 150, false, 0x00FF0000); 
             
            var seed:Number = Math.floor(Math.random() * 100); 
            var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE  
            myBitmapDataObject.perlinNoise(100, 80, 6, seed, false, true, channels, false, null); 
             
            var myBitmap:Bitmap = new Bitmap(myBitmapDataObject); 
            addChild(myBitmap); 
        } 
    } 
}