From ff5c170579e22f025d90960210a7593c49d4e06a Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 17 Jun 2014 22:15:06 +1000 Subject: [PATCH] Ditched the perlin I wrote before --- makefile | 2 +- perlin/perlin_noise.cpp | 86 ------------------- pseudocode.txt | 4 + src/makefile | 2 +- src/shell_scene.cpp | 6 +- src/shell_scene.hpp | 3 +- {perlin => utils}/makefile | 0 utils/maths.cpp | 36 ++++++++ utils/maths.hpp | 36 ++++++++ .../perlin_noise.hpp => utils/simple_rng.hpp | 37 +++----- {perlin => utils}/vector2.hpp | 0 11 files changed, 92 insertions(+), 120 deletions(-) delete mode 100644 perlin/perlin_noise.cpp create mode 100644 pseudocode.txt rename {perlin => utils}/makefile (100%) create mode 100644 utils/maths.cpp create mode 100644 utils/maths.hpp rename perlin/perlin_noise.hpp => utils/simple_rng.hpp (59%) rename {perlin => utils}/vector2.hpp (100%) diff --git a/makefile b/makefile index 6987ff8..f17f0b7 100644 --- a/makefile +++ b/makefile @@ -10,7 +10,7 @@ export OUTDIR=out all: $(OUTDIR) - $(MAKE) -C perlin + $(MAKE) -C utils $(MAKE) -C src $(OUTDIR): diff --git a/perlin/perlin_noise.cpp b/perlin/perlin_noise.cpp deleted file mode 100644 index c093d6a..0000000 --- a/perlin/perlin_noise.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2014 - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. -*/ -#include "perlin_noise.hpp" - -#include "vector2.hpp" - -#include - -//------------------------- -//Public access members -//------------------------- - -double SimpleRNG::operator()(double x) { - return (x + seed) * 345589144.0 + 1123581321.0; -}; - -Vector2 PerlinNoise::Gradient(Vector2 pos) { - //could cache this result - double angle = rng(pos.x * pos.y + pos.y); - Vector2 v(cos(angle), sin(angle)); - v.Normalize(); - return v; -} - -double PerlinNoise::Noise(double x, double y, double width, double height) { - Vector2 queryPoint = {x, y}; - - //calc the region's position - x = Snap(x, width); - y = Snap(y, height); - - //determine the grid points - Vector2 tl = {x, y}; - Vector2 tr = {x + width, y}; - Vector2 bl = {x, y + height}; - Vector2 br = {x + width, y + height}; - - //influence equasion - double s = ScalarProduct(Gradient(tl), queryPoint - tl); - double t = ScalarProduct(Gradient(tr), queryPoint - tr); - double u = ScalarProduct(Gradient(bl), queryPoint - bl); - double v = ScalarProduct(Gradient(br), queryPoint - br); - - //get the noise - double a = s + Curve((t - s) / width); - double b = u + Curve((v - u) / width); - return a + Curve((b - a) / height); -} - -//------------------------- -//Static utility functions -//------------------------- - -double PerlinNoise::Curve(double x) { - //param: 0 to 1 inclusive - return 3.0 * pow(x, 2.0) - 2.0 * pow(x, 3.0); -} - -double PerlinNoise::Snap(double x, double base) { - //snap to a grid (floating point version) - return floor(x / base) * base; -} - -double PerlinNoise::ScalarProduct(Vector2 lhs, Vector2 rhs) { - //the dot product - return lhs.x * rhs.x + lhs.y * rhs.y; -} \ No newline at end of file diff --git a/pseudocode.txt b/pseudocode.txt new file mode 100644 index 0000000..3e24bdf --- /dev/null +++ b/pseudocode.txt @@ -0,0 +1,4 @@ +All terrain is grass by default + +produce a hightmap for the terrain + diff --git a/src/makefile b/src/makefile index 61e4359..81bd1cb 100644 --- a/src/makefile +++ b/src/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. ../perlin +INCLUDES+=. ../utils LIBS+=../libcommon.a -lmingw32 -lSDLmain -lSDL CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/src/shell_scene.cpp b/src/shell_scene.cpp index 82a92c9..9ab2235 100644 --- a/src/shell_scene.cpp +++ b/src/shell_scene.cpp @@ -37,12 +37,12 @@ ShellScene::ShellScene() { int height = 80; image.CreateSurface(GetScreen()->w, GetScreen()->h); - double mod; - int colour; + double mod = 0.0; + int colour = 0; std::cout << "Beggining generation" << std::endl; for (int i = 0; i < image.GetSurface()->w; i++) { for (int j = 0; j < image.GetSurface()->h; j++) { - mod = generator.Noise(i, j, width, height); +// mod = generator.Noise(i, j, width, height); colour = SDL_MapRGB(image.GetSurface()->format, 255*mod, 255*mod, 255*mod); setPixel(image.GetSurface(), i, j, colour); } diff --git a/src/shell_scene.hpp b/src/shell_scene.hpp index 3c9588d..5689ed7 100644 --- a/src/shell_scene.hpp +++ b/src/shell_scene.hpp @@ -25,7 +25,6 @@ #include "base_scene.hpp" #include "image.hpp" -#include "perlin_noise.hpp" class ShellScene : public BaseScene { public: @@ -48,7 +47,7 @@ protected: void KeyUp(SDL_KeyboardEvent const&); //members - PerlinNoise generator; +// PerlinNoise generator; Image image; }; diff --git a/perlin/makefile b/utils/makefile similarity index 100% rename from perlin/makefile rename to utils/makefile diff --git a/utils/maths.cpp b/utils/maths.cpp new file mode 100644 index 0000000..a5952a7 --- /dev/null +++ b/utils/maths.cpp @@ -0,0 +1,36 @@ +/* Copyright: (c) Kayne Ruse 2014 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#include "maths.hpp" + +double curve(double x) { + return 3.0 * pow(x, 2.0) - 2.0 * pow(x, 3.0); +} + +double snap(double x, double base) { + //snap to a grid (floating point version) + return floor(x / base) * base; +} + +double scalarProduct(Vector2 lhs, Vector2 rhs) { + //the dot product + return lhs.x * rhs.x + lhs.y * rhs.y; +} \ No newline at end of file diff --git a/utils/maths.hpp b/utils/maths.hpp new file mode 100644 index 0000000..c0dea17 --- /dev/null +++ b/utils/maths.hpp @@ -0,0 +1,36 @@ +/* Copyright: (c) Kayne Ruse 2014 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#ifndef MATHS_HPP_ +#define MATHS_HPP_ + +#include "vector2.hpp" + +//param: 0 to 1 inclusive +double curve(double); + +//snap x to a grid of base +double snap(double x, double base); + +//vector dot product +double scalarProduct(Vector2, Vector2); + +#endif \ No newline at end of file diff --git a/perlin/perlin_noise.hpp b/utils/simple_rng.hpp similarity index 59% rename from perlin/perlin_noise.hpp rename to utils/simple_rng.hpp index 1705fd1..db3a6af 100644 --- a/perlin/perlin_noise.hpp +++ b/utils/simple_rng.hpp @@ -19,40 +19,23 @@ * 3. This notice may not be removed or altered from any source * distribution. */ -#ifndef PERLINNOISE_HPP_ -#define PERLINNOISE_HPP_ - -#include "vector2.hpp" +#ifndef SIMPLERNG_HPP_ +#define SIMPLERNG_HPP_ class SimpleRNG { public: SimpleRNG() = default; - SimpleRNG(double x) { SetSeed(x); } + SimpleRNG(int x) { SetSeed(x); } - double SetSeed(double s) { return seed = s; } - double GetSeed() { return seed; } + int SetSeed(int s) { return seed = s; } + int GetSeed() { return seed; } - double operator()(double x); + int SimpleRNG::operator()(int x) { + return (x + seed) * 345589144 + 1123581321 + seed; + }; private: - double seed = 8891.0; + int seed = 8891; }; -class PerlinNoise { -public: - PerlinNoise() = default; - ~PerlinNoise() = default; - - Vector2 Gradient(Vector2); - double Influcence(Vector2 gridPoint, Vector2 queryPoint); - - double Noise(double x, double y, double width, double height); -private: - static inline double Curve(double x); - static inline double Snap(double x, double base); - static inline double ScalarProduct(Vector2 lhs, Vector2 rhs); - - SimpleRNG rng; -}; - -#endif +#endif \ No newline at end of file diff --git a/perlin/vector2.hpp b/utils/vector2.hpp similarity index 100% rename from perlin/vector2.hpp rename to utils/vector2.hpp