|
|
|
@ -81,16 +81,105 @@ GLM_FUNC_QUALIFIER detail::tvec4<T> linearRand |
|
|
|
|
linearRand(Min.w, Max.w)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
half gaussRand |
|
|
|
|
template <typename genType> |
|
|
|
|
GLM_FUNC_QUALIFIER genType gaussRand |
|
|
|
|
( |
|
|
|
|
genType const & Mean, |
|
|
|
|
genType const & Deviation |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
genType w, x1, x2; |
|
|
|
|
|
|
|
|
|
do |
|
|
|
|
{ |
|
|
|
|
x1 = compRand1(genType(-1), genType(1)); |
|
|
|
|
x2 = compRand1(genType(-1), genType(1)); |
|
|
|
|
|
|
|
|
|
w = x1 * x1 + x2 * x2; |
|
|
|
|
} while(w > genType(1)); |
|
|
|
|
|
|
|
|
|
return x2 * std_deviation * std_deviation * sqrt((genType(-2) * log(w)) / w) + mean; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
GLM_FUNC_QUALIFIER detail::tvec2<T> gaussRand |
|
|
|
|
( |
|
|
|
|
detail::tvec2<T> const & Min, |
|
|
|
|
detail::tvec2<T> const & Max |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
return detail::tvec2<T>( |
|
|
|
|
gaussRand(Min.x, Max.x), |
|
|
|
|
gaussRand(Min.y, Max.y)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
GLM_FUNC_QUALIFIER detail::tvec3<T> gaussRand |
|
|
|
|
( |
|
|
|
|
detail::tvec3<T> const & Min, |
|
|
|
|
detail::tvec3<T> const & Max |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
return detail::tvec3<T>( |
|
|
|
|
gaussRand(Min.x, Max.x), |
|
|
|
|
gaussRand(Min.y, Max.y), |
|
|
|
|
gaussRand(Min.z, Max.z)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
GLM_FUNC_QUALIFIER detail::tvec4<T> gaussRand |
|
|
|
|
( |
|
|
|
|
half const & Mean, |
|
|
|
|
half const & Deviation |
|
|
|
|
detail::tvec4<T> const & Min, |
|
|
|
|
detail::tvec4<T> const & Max |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
return detail::tvec4<T>( |
|
|
|
|
gaussRand(Min.x, Max.x), |
|
|
|
|
gaussRand(Min.y, Max.y), |
|
|
|
|
gaussRand(Min.z, Max.z), |
|
|
|
|
gaussRand(Min.w, Max.w)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
GLM_FUNC_QUALIFIER detail::tvec3<T> diskRand |
|
|
|
|
( |
|
|
|
|
T const & Radius |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
detail::tvec2<T> Result(T(0)); |
|
|
|
|
T LenRadius(T(0)); |
|
|
|
|
|
|
|
|
|
do |
|
|
|
|
{ |
|
|
|
|
Result = compRand2(-Radius, Radius); |
|
|
|
|
LenRadius = length(Result); |
|
|
|
|
} |
|
|
|
|
while(LenRadius > Radius); |
|
|
|
|
|
|
|
|
|
return Result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
GLM_FUNC_QUALIFIER detail::tvec3<T> ballRand |
|
|
|
|
( |
|
|
|
|
T const & Radius |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
detail::tvec3<T> Result(T(0)); |
|
|
|
|
T LenRadius(T(0)); |
|
|
|
|
|
|
|
|
|
do |
|
|
|
|
{ |
|
|
|
|
Result = compRand3(-Radius, Radius); |
|
|
|
|
LenRadius = length(Result); |
|
|
|
|
} |
|
|
|
|
while(LenRadius > Radius); |
|
|
|
|
|
|
|
|
|
return Result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
detail::tvec2<T> circularRand |
|
|
|
|
GLM_FUNC_QUALIFIER detail::tvec2<T> circularRand |
|
|
|
|
( |
|
|
|
|
T const & Radius |
|
|
|
|
) |
|
|
|
@ -100,7 +189,7 @@ detail::tvec2<T> circularRand |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
detail::tvec3<T> sphericalRand |
|
|
|
|
GLM_FUNC_QUALIFIER detail::tvec3<T> sphericalRand |
|
|
|
|
( |
|
|
|
|
T const & Radius |
|
|
|
|
) |
|
|
|
|