[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-kimageshop
Subject: Re: noise generators (forked from: Krita user community?)
From: Matthew Woehlke <mw_triad () users ! sourceforge ! net>
Date: 2008-02-25 1:10:19
Message-ID: fpt4i2$n5c$1 () ger ! gmane ! org
[Download RAW message or body]
Cyrille Berger wrote:
> On Sunday 24 February 2008, Matthew Woehlke wrote:
>> (Ok, erand48 will have to go, but that's completely
>> self-contained as I've assumed from the outset that my current
>> procedural PRN formula would be only temporary... not least because it
>> turns out rand48 isn't very *good*.)
>
> The slight annoyance with rand48/erand48 is that those functions are not
> thread safe, and as it is recursive noise generator, it doesn't work well if
> we ask for an update of a rectangle of the generated images which is
> different from the original rect.
Eh? I'm using the flavor that claims to be re-entrant (i.e. the one that
takes the seed as an in/out). I actually do all my PRN-getting via a
myRandom() function that takes the X,Y coordinates and random seed, so
replacing mine with Krita's should be easy. (Or maybe Krita's would
benefit from my approach?)
> For this we have a random number generator
> in Krita, that takes as argument the current coordinate of the pixel. (The
> formula is probably not very *good*, but I don't know any random number
> generator formula that is very *good*).
I trust it also takes the random seed? I especially need that because I
need several *different* random values per pixel (I want to say, as many
as five); I handle this by simply adding a fixed value to the random
seed, which should be "good enough".
I don't have the exact formula handy (ask tomorrow if you want it), but
what I do is approximately:
- Run the rand() formula (a*s + b) on the X coordinate
- Initialize (unsigned short) s[3] = with the X (after "salt") and Y
coordinates with the upper 16 bits XOR'd onto the lower 16.
- Call rand48 on s for Y % 37 iterations
- Call rand48 one last time, this time returning the result
What I found is that without the two flavors of 'salt', if I filled
every pixel with the straight-up results of rand48 with the seed
initialized as above, I got something that wasn't random in the
slightest (diagonal saw waves, in fact). With only one salt, it was
better, but still looked regular.
--
Matthew
(sorry, .sig file is on the other computer)
_______________________________________________
kimageshop mailing list
kimageshop@kde.org
https://mail.kde.org/mailman/listinfo/kimageshop
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic