Update to HaltonSequence to make it easier to fill your own custom structures with halton sequences.

This commit is contained in:
pruiksma
2021-05-25 21:34:53 -05:00
parent 29163fba1a
commit ab84a43a83
2 changed files with 56 additions and 11 deletions
+12 -7
View File
@@ -127,16 +127,13 @@ namespace AZ
m_increments.fill(1); // By default increment by 1 between each number.
}
//! Returns a Halton sequence in an array of N length
template<uint32_t N>
AZStd::array<AZStd::array<float, Dimensions>, N> GetHaltonSequence()
template<class Iterator>
void FillHaltonSequence(Iterator begin, Iterator end)
{
AZStd::array<AZStd::array<float, Dimensions>, N> result;
AZStd::array<uint32_t, Dimensions> indices = m_offsets;
// Generator that returns the Halton number for all bases for a single entry.
auto f = [&] ()
auto f = [&]()
{
AZStd::array<float, Dimensions> item;
for (auto d = 0; d < Dimensions; ++d)
@@ -147,7 +144,15 @@ namespace AZ
return item;
};
AZStd::generate(result.begin(), result.end(), f);
AZStd::generate(begin, end, f);
}
//! Returns a Halton sequence in an array of N length
template<uint32_t N>
AZStd::array<AZStd::array<float, Dimensions>, N> GetHaltonSequence()
{
AZStd::array<AZStd::array<float, Dimensions>, N> result;
FillHaltonSequence(result.begin(), result.end());
return result;
}