10 #ifndef RANDOM_AND_NOISE_H
11 #define RANDOM_AND_NOISE_H
13 #include <glm/vec2.hpp>
18 float evaluate(
int index) {
21 float invB = 1.0f / (float)B;
26 r = r + f * (float)(index % B);
35 inline float getRadicalInverseVdC(uint32_t bits) {
36 bits = (bits << 16u) | (bits >> 16u);
37 bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
38 bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
39 bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
40 bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
41 return float(bits) * 2.3283064365386963e-10f;
44 namespace hammersley {
46 inline glm::vec2 evaluate(
int k,
const int sequenceLength) {
47 return glm::vec2(
float(k) /
float(sequenceLength), getRadicalInverseVdC(k));