From c5b057e5854c61f70411ce230657bf50b4a1b754 Mon Sep 17 00:00:00 2001 From: Anselme Date: Thu, 2 Jun 2016 14:40:44 +0200 Subject: [PATCH] added toreiller skybox --- icon.rc | 2 +- PixelWars.ico => img/PixelWars.ico | Bin img/sky_back.PNG | Bin 0 -> 3499 bytes img/sky_front.PNG | Bin 0 -> 3984 bytes resources.qrc | 6 +++++ shaders/skybox.frag.glsl | 32 +++++++++++++++++++++++++ shaders/skybox.vert.glsl | 21 ++++++++++++++++ shaders/world.frag.glsl | 2 +- shaders/world.vert.glsl | 3 ++- src/mainwindow.cpp | 2 +- src/mainwindow.ui | 17 +++++++------ src/mapscene.cpp | 2 +- src/mapscene.h | 2 +- src/pixelpipeline.cpp | 37 +++++++++++++++++++++++------ src/pixelpipeline.h | 6 ++++- src/pixeltype.h | 2 +- 16 files changed, 112 insertions(+), 22 deletions(-) rename PixelWars.ico => img/PixelWars.ico (100%) create mode 100644 img/sky_back.PNG create mode 100644 img/sky_front.PNG create mode 100644 shaders/skybox.frag.glsl create mode 100644 shaders/skybox.vert.glsl diff --git a/icon.rc b/icon.rc index 44c5b4f..35a3531 100644 --- a/icon.rc +++ b/icon.rc @@ -1 +1 @@ -icon ICON PixelWars.ico \ No newline at end of file +icon ICON img/PixelWars.ico \ No newline at end of file diff --git a/PixelWars.ico b/img/PixelWars.ico similarity index 100% rename from PixelWars.ico rename to img/PixelWars.ico diff --git a/img/sky_back.PNG b/img/sky_back.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cdd7134b2198c1185843ba42d80ad91dc221289e GIT binary patch literal 3499 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 literal 0 HcmV?d00001 diff --git a/img/sky_front.PNG b/img/sky_front.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8e61fcc35d5ea1a8855498d182af4ca214365779 GIT binary patch literal 3984 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 literal 0 HcmV?d00001 diff --git a/resources.qrc b/resources.qrc index 716e686..9ba8ca0 100644 --- a/resources.qrc +++ b/resources.qrc @@ -49,5 +49,11 @@ shaders/pixel.vert.glsl shaders/world.frag.glsl shaders/world.vert.glsl + shaders/skybox.frag.glsl + shaders/skybox.vert.glsl + + + img/sky_front.png + img/sky_back.png diff --git a/shaders/skybox.frag.glsl b/shaders/skybox.frag.glsl new file mode 100644 index 0000000..67fb03f --- /dev/null +++ b/shaders/skybox.frag.glsl @@ -0,0 +1,32 @@ +#version 330 core + +uniform sampler2D frontMap; +uniform sampler2D backMap; + +uniform vec3 camera; +uniform vec2 worldSize; +uniform vec2 screenSize; +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); +} diff --git a/shaders/skybox.vert.glsl b/shaders/skybox.vert.glsl new file mode 100644 index 0000000..5bd6a27 --- /dev/null +++ b/shaders/skybox.vert.glsl @@ -0,0 +1,21 @@ +#version 330 core + +layout(location = 0)in vec3 inPosition; +layout(location = 2)in vec2 inTexCoord; +layout(location = 1)in vec3 inNormal; + +uniform float flatSphere; +uniform vec2 screenSize; +uniform mat4 mvp; +uniform vec3 camera; + +out vec2 texCoord; +out vec3 normal; + +void main(void) +{ + texCoord = vec2(inTexCoord.x, inTexCoord.y); + normal = inNormal.xyz; + vec4 projPos = mvp * vec4(-inPosition, 1.0); + gl_Position = projPos; +} diff --git a/shaders/world.frag.glsl b/shaders/world.frag.glsl index dc94763..d41e1d8 100644 --- a/shaders/world.frag.glsl +++ b/shaders/world.frag.glsl @@ -32,7 +32,7 @@ void main() nbRevolutions.x = int(floor(worldCoord.x / worldSize.x)); } worldCoord = worldCoord - nbRevolutions*worldSize; - vec3 texColor = texelFetch(colorMap, ivec2(worldCoord)).xyz; + vec3 texColor = texelFetch(colorMap, ivec2(worldCoord.x, worldSize.y-worldCoord.y)).xyz; // computing lighting vec3 lighting = phongLighting(texColor, vec3(0.5), 50, vec3(1), normalize(normal), lightDir, normalize(lightDir+vec3(0, 0, -1))); diff --git a/shaders/world.vert.glsl b/shaders/world.vert.glsl index 9699638..db0eaec 100644 --- a/shaders/world.vert.glsl +++ b/shaders/world.vert.glsl @@ -19,6 +19,7 @@ void main(void) texCoord = mix(texCoord, flatTexCoord, vec2(flatSphere)); normal = inNormal.xyz; vec4 flatPos = vec4(inTexCoord.x*2 -1, inTexCoord.y*2 -1, 0.0, 1.0); - vec4 projPos = mvp * vec4(inPosition*camera.z, 1.0); + vec3 position = vec3(inPosition.xy, inPosition.z - 1); + vec4 projPos = mvp * vec4(position*camera.z, 1.0); gl_Position = mix(projPos, flatPos, vec4(flatSphere)); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4ef96dc..870f2bc 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -55,7 +55,7 @@ void MainWindow::openSimuDialog() void MainWindow::changeSimSpeed(int newSpeed) { m_simSpeedChanged = true; - m_simSpeed = newSpeed; + m_simSpeed = ui->simSpeedSlider->maximum()-newSpeed; } void MainWindow::updateSimu() diff --git a/src/mainwindow.ui b/src/mainwindow.ui index f1eb156..44dbc5e 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -96,7 +96,7 @@ - Flat / Sphere + Spherical / Flat @@ -105,14 +105,17 @@ true + + Qt::LeftToRight + 100 - 2 + 5 - 2 + 5 Qt::Horizontal @@ -188,10 +191,10 @@ 100 - 500 + 2000 - 500 + 2000 Qt::Horizontal @@ -230,8 +233,8 @@ 0 0 - 98 - 56 + 260 + 346 diff --git a/src/mapscene.cpp b/src/mapscene.cpp index e41c3e9..2cccbc1 100644 --- a/src/mapscene.cpp +++ b/src/mapscene.cpp @@ -8,7 +8,7 @@ glm::vec3 MapScene::getColor(const Pixel &px) const { switch(px.type) { - case BEDROCK : return HEX_TO_VEC3(0x101020); + case WATER : return HEX_TO_VEC3(0x2033B0); case GRASS : return HEX_TO_VEC3(0x719678); case MARK : return HEX_TO_VEC3(0x5D7B62); case ROCK : return HEX_TO_VEC3(0x8C8C8C); diff --git a/src/mapscene.h b/src/mapscene.h index 222e919..457f882 100644 --- a/src/mapscene.h +++ b/src/mapscene.h @@ -11,7 +11,7 @@ struct MapScene : public Map, public BasicScene { public: - MapScene(int n, int w, int h=0) : Map(n, w, h), m_teamColors(new TeamColor[n]),m_vao(0),m_vbo(0) {} + MapScene(int n=0, int w=300, int h=0) : Map(n, w, h), m_teamColors(new TeamColor[n]),m_vao(0),m_vbo(0) {} ~MapScene(); diff --git a/src/pixelpipeline.cpp b/src/pixelpipeline.cpp index 045fa5a..bf6d723 100644 --- a/src/pixelpipeline.cpp +++ b/src/pixelpipeline.cpp @@ -22,7 +22,7 @@ public: float clockAngle = atan2(relUV.y, relUV.x); float depthAngle = glm::length(relUV)*3.1416f*MAGIC_RATIO; float r = sin(depthAngle); - return glm::vec3(r*cos(clockAngle), r*sin(clockAngle), cos(depthAngle)-1); + return glm::vec3(r*cos(clockAngle), r*sin(clockAngle), cos(depthAngle)); } }; @@ -61,6 +61,11 @@ PixelPipeline::PixelPipeline(MapScene *map) : vertSource = QtUtils::fileToString(":shaders/shaders/world.vert.glsl").toStdString(); fragSource = QtUtils::fileToString(":shaders/shaders/world.frag.glsl").toStdString(); m_renderShader = new Shader(vertSource, fragSource); + vertSource = QtUtils::fileToString(":shaders/shaders/skybox.vert.glsl").toStdString(); + fragSource = QtUtils::fileToString(":shaders/shaders/skybox.frag.glsl").toStdString(); + m_skyboxShader = new Shader(vertSource, fragSource); + m_skyTexFront = new Texture(QtUtils::loadImage(":images/img/sky_front.png")); + m_skyTexBack = new Texture(QtUtils::loadImage(":images/img/sky_back.png")); updateChanges(); } @@ -92,6 +97,25 @@ void PixelPipeline::renderGL(Scene *scene) glClearColor(0, 0, 0, 1); glDisable(GL_BLEND); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glClearDepth(1); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_FALSE); + m_skyboxShader->bind(); + m_skyboxShader->bindVec3(m_skyboxShader->getLocation("camera"), m_camera); + m_renderShader->bindVec2(m_skyboxShader->getLocation("worldSize"), glm::vec2(m_mapWidth, m_mapHeight)); + m_skyboxShader->bindVec2(m_skyboxShader->getLocation("screenSize"), glm::vec2(m_width, m_height)); + m_skyboxShader->bindFloat(m_skyboxShader->getLocation("surfaceRatio"), m_surfaceRatio); + m_skyboxShader->bindFloat(m_skyboxShader->getLocation("flatSphere"), m_flatSphere); + m_skyTexFront->bind(0); + m_skyTexBack->bind(1); + m_skyboxShader->bindInteger(m_skyboxShader->getLocation("frontMap"), 0); + m_skyboxShader->bindInteger(m_skyboxShader->getLocation("backMap"), 1); + + m_skyboxShader->bindMat4(m_skyboxShader->getLocation("mvp"), m_proj); + m_toreiller->draw(m_skyboxShader); + + glDepthMask(GL_TRUE); m_renderShader->bind(); m_renderShader->bindVec3(m_renderShader->getLocation("camera"), m_camera); m_renderShader->bindVec2(m_renderShader->getLocation("worldSize"), glm::vec2(m_mapWidth, m_mapHeight)); @@ -100,11 +124,9 @@ void PixelPipeline::renderGL(Scene *scene) m_renderShader->bindFloat(m_renderShader->getLocation("flatSphere"), m_flatSphere); m_mapTex->bind(0); m_renderShader->bindInteger(m_renderShader->getLocation("colorMap"), 0); - - glClearDepth(1); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glEnable(GL_DEPTH_TEST); - m_renderShader->bindMat4(m_renderShader->getLocation("mvp"), m_mvp); + + glm::mat4 mvp = m_proj * m_view; + m_renderShader->bindMat4(m_renderShader->getLocation("mvp"), mvp); m_toreiller->draw(m_renderShader); } @@ -112,7 +134,8 @@ void PixelPipeline::resizeGL(int w, int h) { m_width = w; m_height = h; - m_mvp = glm::translate(glm::perspectiveFov(70.f, float(w), float(h), 0.1f, 10.f), glm::vec3(0, 0, -3)); + m_proj = glm::perspectiveFov(70.f, float(w), float(h), 0.1f, 10.f); + m_view = glm::translate(glm::mat4(), glm::vec3(0, 0, -3)); } void PixelPipeline::cameraZoom(int nbScrolls) diff --git a/src/pixelpipeline.h b/src/pixelpipeline.h index e523d1c..27fd8a9 100644 --- a/src/pixelpipeline.h +++ b/src/pixelpipeline.h @@ -17,6 +17,9 @@ private: FrameBuffer *m_mapFBO; Texture *m_mapTex; Shader *m_texMapShader; + Texture *m_skyTexFront; + Texture *m_skyTexBack; + Shader *m_skyboxShader; MapScene *m_map; int m_mapWidth; int m_mapHeight; @@ -29,7 +32,8 @@ private: glm::vec3 m_camera; Mesh *m_toreiller; - glm::mat4 m_mvp; + glm::mat4 m_proj; + glm::mat4 m_view; public: PixelPipeline(MapScene *map); diff --git a/src/pixeltype.h b/src/pixeltype.h index ceb0a97..1bea40f 100644 --- a/src/pixeltype.h +++ b/src/pixeltype.h @@ -2,7 +2,7 @@ #define PIXELTYPE_H enum PixelType { - BEDROCK, GRASS, TREE, BERRIES, ROCK, IRON_ORE, // nature + WATER, GRASS, TREE, BERRIES, ROCK, IRON_ORE, // nature FOOD, WOOD, STONE, IRON, SWORD, // resources DUDE, DEAD_DUDE, // humans SPAWN, WALL, ROAD, MARK, LIBRARY, // buildings