Updated noise extension API

This commit is contained in:
Christophe Riccio 2011-04-28 11:26:18 +01:00
parent b80a6bb251
commit 7fad31404d
3 changed files with 18 additions and 14 deletions

View File

@ -41,20 +41,20 @@ namespace glm
//! Classic perlin noise. //! Classic perlin noise.
//! From GLM_GTX_noise extension. //! From GLM_GTX_noise extension.
template <typename T, template<typename> class vecType> template <typename T, template<typename> class vecType>
T cnoise( T perlin(
vecType<T> const & p); vecType<T> const & p);
//! Periodic perlin noise. //! Periodic perlin noise.
//! From GLM_GTX_noise extension. //! From GLM_GTX_noise extension.
template <typename T, template<typename> class vecType> template <typename T, template<typename> class vecType>
T pnoise( T perlin(
vecType<T> const & p, vecType<T> const & p,
vecType<T> const & rep); vecType<T> const & rep);
//! Simplex noise. //! Simplex noise.
//! From GLM_GTX_noise extension. //! From GLM_GTX_noise extension.
template <typename T, template<typename> class vecType> template <typename T, template<typename> class vecType>
T snoise( T simplex(
vecType<T> const & p); vecType<T> const & p);
///@} ///@}

View File

@ -62,7 +62,7 @@ namespace noise
{ {
// Classic Perlin noise // Classic Perlin noise
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T cnoise(detail::tvec2<T> const & P) GLM_FUNC_QUALIFIER T perlin(detail::tvec2<T> const & P)
{ {
detail::tvec4<T> Pi = floor(detail::tvec4<T>(P.x, P.y, P.x, P.y)) + detail::tvec4<T>(0.0, 0.0, 1.0, 1.0); detail::tvec4<T> Pi = floor(detail::tvec4<T>(P.x, P.y, P.x, P.y)) + detail::tvec4<T>(0.0, 0.0, 1.0, 1.0);
detail::tvec4<T> Pf = fract(detail::tvec4<T>(P.x, P.y, P.x, P.y)) - detail::tvec4<T>(0.0, 0.0, 1.0, 1.0); detail::tvec4<T> Pf = fract(detail::tvec4<T>(P.x, P.y, P.x, P.y)) - detail::tvec4<T>(0.0, 0.0, 1.0, 1.0);
@ -103,7 +103,7 @@ namespace noise
// Classic Perlin noise // Classic Perlin noise
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T cnoise(detail::tvec3<T> const & P) GLM_FUNC_QUALIFIER T perlin(detail::tvec3<T> const & P)
{ {
detail::tvec3<T> Pi0 = floor(P); // Integer part for indexing detail::tvec3<T> Pi0 = floor(P); // Integer part for indexing
detail::tvec3<T> Pi1 = Pi0 + T(1); // Integer part + 1 detail::tvec3<T> Pi1 = Pi0 + T(1); // Integer part + 1
@ -176,7 +176,7 @@ namespace noise
// Classic Perlin noise // Classic Perlin noise
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T cnoise(detail::tvec4<T> const & P) GLM_FUNC_QUALIFIER T perlin(detail::tvec4<T> const & P)
{ {
detail::tvec4<T> Pi0 = floor(P); // Integer part for indexing detail::tvec4<T> Pi0 = floor(P); // Integer part for indexing
detail::tvec4<T> Pi1 = Pi0 + T(1); // Integer part + 1 detail::tvec4<T> Pi1 = Pi0 + T(1); // Integer part + 1
@ -312,10 +312,10 @@ namespace noise
// Classic Perlin noise, periodic variant // Classic Perlin noise, periodic variant
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T pnoise(detail::tvec2<T> const & P, detail::tvec2<T> const & rep) GLM_FUNC_QUALIFIER T perlin(detail::tvec2<T> const & P, detail::tvec2<T> const & rep)
{ {
detail::tvec4<T> Pi = floor(P.x, P.y, P.x, P.y) + detail::tvec4<T>(0.0, 0.0, 1.0, 1.0); detail::tvec4<T> Pi = floor(detail::tvec4<T>(P.x, P.y, P.x, P.y)) + detail::tvec4<T>(0.0, 0.0, 1.0, 1.0);
detail::tvec4<T> Pf = fract(P.x, P.y, P.x, P.y) - detail::tvec4<T>(0.0, 0.0, 1.0, 1.0); detail::tvec4<T> Pf = fract(detail::tvec4<T>(P.x, P.y, P.x, P.y)) - detail::tvec4<T>(0.0, 0.0, 1.0, 1.0);
Pi = mod(Pi, detail::tvec4<T>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period Pi = mod(Pi, detail::tvec4<T>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period
Pi = mod(Pi, T(289)); // To avoid truncation effects in permutation Pi = mod(Pi, T(289)); // To avoid truncation effects in permutation
detail::tvec4<T> ix(Pi.x, Pi.z, Pi.x, Pi.z); detail::tvec4<T> ix(Pi.x, Pi.z, Pi.x, Pi.z);
@ -354,7 +354,7 @@ namespace noise
// Classic Perlin noise, periodic variant // Classic Perlin noise, periodic variant
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T pnoise(detail::tvec3<T> const & P, detail::tvec3<T> const & rep) GLM_FUNC_QUALIFIER T perlin(detail::tvec3<T> const & P, detail::tvec3<T> const & rep)
{ {
detail::tvec3<T> Pi0 = mod(floor(P), rep); // Integer part, modulo period detail::tvec3<T> Pi0 = mod(floor(P), rep); // Integer part, modulo period
detail::tvec3<T> Pi1 = mod(Pi0 + detail::tvec3<T>(1.0), rep); // Integer part + 1, mod period detail::tvec3<T> Pi1 = mod(Pi0 + detail::tvec3<T>(1.0), rep); // Integer part + 1, mod period
@ -425,7 +425,7 @@ namespace noise
// Classic Perlin noise, periodic version // Classic Perlin noise, periodic version
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T pnoise(detail::tvec4<T> const & P, detail::tvec4<T> const & rep) GLM_FUNC_QUALIFIER T perlin(detail::tvec4<T> const & P, detail::tvec4<T> const & rep)
{ {
detail::tvec4<T> Pi0 = mod(floor(P), rep); // Integer part modulo rep detail::tvec4<T> Pi0 = mod(floor(P), rep); // Integer part modulo rep
detail::tvec4<T> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep detail::tvec4<T> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep
@ -558,7 +558,7 @@ namespace noise
} }
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T snoise(glm::detail::tvec2<T> const & v) GLM_FUNC_QUALIFIER T simplex(glm::detail::tvec2<T> const & v)
{ {
detail::tvec4<T> const C = detail::tvec4<T>( detail::tvec4<T> const C = detail::tvec4<T>(
T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0
@ -615,7 +615,7 @@ namespace noise
} }
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T snoise(detail::tvec3<T> const & v) GLM_FUNC_QUALIFIER T simplex(detail::tvec3<T> const & v)
{ {
detail::tvec2<T> const C = detail::tvec2<T>(1.0 / 6.0, 1.0 / 3.0); detail::tvec2<T> const C = detail::tvec2<T>(1.0 / 6.0, 1.0 / 3.0);
detail::tvec4<T> const D = detail::tvec4<T>(0.0, 0.5, 1.0, 2.0); detail::tvec4<T> const D = detail::tvec4<T>(0.0, 0.5, 1.0, 2.0);
@ -702,7 +702,7 @@ namespace noise
} }
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T snoise(detail::tvec4<T> const & v) GLM_FUNC_QUALIFIER T simplex(detail::tvec4<T> const & v)
{ {
detail::tvec4<T> const C( detail::tvec4<T> const C(
0.138196601125011, // (5 - sqrt(5))/20 G4 0.138196601125011, // (5 - sqrt(5))/20 G4

View File

@ -20,4 +20,8 @@ int main()
float ValueCNoise2D = glm::cnoise(glm::vec2(0.5f)); float ValueCNoise2D = glm::cnoise(glm::vec2(0.5f));
float ValueCNoise3D = glm::cnoise(glm::vec3(0.5f)); float ValueCNoise3D = glm::cnoise(glm::vec3(0.5f));
float ValueCNoise4D = glm::cnoise(glm::vec4(0.5f)); float ValueCNoise4D = glm::cnoise(glm::vec4(0.5f));
float ValuePNoise2D = glm::pnoise(glm::vec2(0.5f), glm::vec2(0.5f));
float ValuePNoise3D = glm::pnoise(glm::vec3(0.5f), glm::vec3(0.5f));
float ValuePNoise4D = glm::pnoise(glm::vec4(0.5f), glm::vec4(0.5f));
} }