#version 330 core uniform sampler2D frontMap; uniform sampler2D backMap; uniform vec3 camera; uniform vec2 worldSize; uniform float flatSphere; uniform float surfaceRatio; in vec2 texCoord; in vec3 normal; out vec4 outColor; void main() { // looping the world in the shape of a toreiller (infinite flat surface) vec2 worldCoord = texCoord*worldSize + camera.xy*worldSize + (texCoord-vec2(0.25, 0.5))*surfaceRatio*worldSize; vec2 texCoordWorld = worldCoord / worldSize; ivec2 nbRevolutions = ivec2(floor(texCoordWorld)); vec3 texColor; texCoordWorld = mod(texCoordWorld, 1); if(abs(mod(nbRevolutions.y+nbRevolutions.x, 2)) > 0.5) texColor = texture(backMap, texCoordWorld).xyz; else texColor = texture(frontMap, texCoordWorld).xyz; // computing lighting outColor = vec4(texColor, 1.0); }