X-Git-Url: http://git.treefish.org/~alex/seamulator.git/blobdiff_plain/ce5cb9e3b065ec3eabd2ffa79923043fdfb2087a..40fe15ee6190427f3bbc5db4ff640442626cc3bb:/src/watersurface.cpp diff --git a/src/watersurface.cpp b/src/watersurface.cpp new file mode 100644 index 0000000..a38ad57 --- /dev/null +++ b/src/watersurface.cpp @@ -0,0 +1,59 @@ +#include "watersurface.h" + +#include + +WaterSurface::WaterSurface(int size, double extend) : + m_size{size}, + m_extend{extend} +{ + m_points.resize(size*size); +} + +SurfacePoint& WaterSurface::at(int x, int y) +{ + return m_points.at(x + m_size*y); +} + +const SurfacePoint& WaterSurface::at(int x, int y) const +{ + return m_points.at(x + m_size*y); +} + +int WaterSurface::size() const +{ + return m_size; +} + +double WaterSurface::extend() const +{ + return m_extend; +} + +void WaterSurface::draw() const +{ + const double scaleFactor{m_extend / m_size}; + + glScalef(scaleFactor, scaleFactor, 1.0f); + glTranslatef(-(float)(m_size - 1) / 2, -(float)(m_size - 1) / 2, 0); + + for (int y = 0; y < m_size - 1; ++y) { + for (int x = 0; x < m_size - 1; ++x) { + drawSingleTile(x, y); + } + } +} + +void WaterSurface::drawSingleTile(int x, int y) const +{ + glBegin(GL_TRIANGLES); + + glVertex3f(x, y, at(x, y).getHeight()); + glVertex3f(x+1, y, at(x+1, y).getHeight()); + glVertex3f(x+1, y+1, at(x+1, y+1).getHeight()); + + glVertex3f(x, y, at(x, y).getHeight()); + glVertex3f(x, y+1, at(x, y+1).getHeight()); + glVertex3f(x+1, y+1, at(x+1, y+1).getHeight()); + + glEnd(); +}