#version 330 core
  
layout (location = 0 ) in vec3 vVertex; //położenie wierzchołka w przestrzeni obiektu

//uniformy
uniform mat4 MVP;					//połączona macierz modelu, widoku i rzutowania
uniform ivec2 HALF_TERRAIN_SIZE;	//połówkowy rozmiar terenu
uniform sampler2D heightMapTexture;	//tekstura mapy wysokości
uniform float scale;				//skala tekstury
uniform float half_scale;			//skala połówkowa

void main()
{   
	//pobieranie wysokości dla bieżącego wierzchołka 
	//skalowanie wysokości przy użyciu uniformów scale i half_scale
	float height = texture(heightMapTexture, vVertex.xz).r*scale - half_scale;

	//przesuwanie wierzchołków do obszaru od -HALF_TERRAIN_SIZE do HALF_TERRAIN_SIZE
	//wzdłuż obu osi układu współrzędnych
	vec2 pos = (vVertex.xz*2.0-1)*HALF_TERRAIN_SIZE;

	//mnożenie macierzy modelu, widoku i rzutowania przez przeskalowane połozenie i wysokość 
	gl_Position = MVP*vec4(pos.x, height, pos.y, 1);			
}