diff options
Diffstat (limited to '')
-rw-r--r-- | src/RendererWorld.cpp | 102 |
1 files changed, 51 insertions, 51 deletions
diff --git a/src/RendererWorld.cpp b/src/RendererWorld.cpp index 7354c7c..64cdffc 100644 --- a/src/RendererWorld.cpp +++ b/src/RendererWorld.cpp @@ -317,6 +317,55 @@ void RendererWorld::Render(RenderState & renderState) { glCheckError(); } + //Render sky + renderState.TimeOfDay = gs->TimeOfDay; + renderState.SetActiveShader(skyShader->Program); + projectionLoc = glGetUniformLocation(skyShader->Program, "projection"); + viewLoc = glGetUniformLocation(skyShader->Program, "view"); + glUniformMatrix4fv(projectionLoc, 1, GL_FALSE, glm::value_ptr(projection)); + glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view)); + glm::mat4 model = glm::mat4(); + model = glm::translate(model, gs->player->pos.glm()); + const float scale = 1000000.0f; + model = glm::scale(model, glm::vec3(scale, scale, scale)); + float shift = gs->TimeOfDay / 24000.0f; + if (shift < 0) + shift *= -1.0f; + model = glm::rotate(model, glm::radians(90.0f), glm::vec3(0, 1.0f, 0.0f)); + model = glm::rotate(model, glm::radians(360.0f * shift), glm::vec3(-1.0f, 0.0f, 0.0f)); + modelLoc = glGetUniformLocation(skyShader->Program, "model"); + glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); + + glCheckError(); + + const int sunriseMin = 22000; + const int sunriseMax = 23500; + const int moonriseMin = 12000; + const int moonriseMax = 13500; + const float sunriseLength = sunriseMax - sunriseMin; + const float moonriseLength = moonriseMax - moonriseMin; + + float mixLevel = 0; + int dayTime = gs->TimeOfDay; + if (dayTime < 0) + dayTime *= -1; + while (dayTime > 24000) + dayTime -= 24000; + if (dayTime > 0 && dayTime < moonriseMin || dayTime > sunriseMax) //day + mixLevel = 1.0; + if (dayTime > moonriseMax && dayTime < sunriseMin) //night + mixLevel = 0.0; + if (dayTime >= sunriseMin && dayTime <= sunriseMax) //sunrise + mixLevel = (dayTime - sunriseMin) / sunriseLength; + if (dayTime >= moonriseMin && dayTime <= moonriseMax) { //moonrise + float timePassed = (dayTime - moonriseMin); + mixLevel = 1.0 - (timePassed / moonriseLength); + } + + glUniform1f(glGetUniformLocation(skyShader->Program, "DayTime"), mixLevel); + + rendererSky.Render(renderState); + glCheckError(); //Render sections renderState.SetActiveShader(blockShader->Program); @@ -324,7 +373,8 @@ void RendererWorld::Render(RenderState & renderState) { viewLoc = glGetUniformLocation(blockShader->Program, "view"); windowSizeLoc = glGetUniformLocation(blockShader->Program, "windowSize"); pvLoc = glGetUniformLocation(blockShader->Program, "projView"); - + + glUniform1f(glGetUniformLocation(blockShader->Program, "DayTime"), mixLevel); glUniformMatrix4fv(pvLoc, 1, GL_FALSE, glm::value_ptr(projView)); glUniform2f(windowSizeLoc, renderState.WindowWidth, renderState.WindowHeight); glCheckError(); @@ -373,56 +423,6 @@ void RendererWorld::Render(RenderState & renderState) { this->culledSections = culledSections; sectionsMutex.unlock(); glCheckError(); - - //Render sky - renderState.TimeOfDay = gs->TimeOfDay; - renderState.SetActiveShader(skyShader->Program); - projectionLoc = glGetUniformLocation(skyShader->Program, "projection"); - viewLoc = glGetUniformLocation(skyShader->Program, "view"); - glUniformMatrix4fv(projectionLoc, 1, GL_FALSE, glm::value_ptr(projection)); - glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view)); - glm::mat4 model = glm::mat4(); - model = glm::translate(model, gs->player->pos.glm()); - const float scale = 1000000.0f; - model = glm::scale(model, glm::vec3(scale, scale, scale)); - float shift = gs->TimeOfDay / 24000.0f; - if (shift < 0) - shift *= -1.0f; - model = glm::rotate(model, glm::radians(90.0f), glm::vec3(0, 1.0f, 0.0f)); - model = glm::rotate(model, glm::radians(360.0f * shift), glm::vec3(-1.0f, 0.0f, 0.0f)); - modelLoc = glGetUniformLocation(skyShader->Program, "model"); - glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); - - glCheckError(); - - const int sunriseMin = 22000; - const int sunriseMax = 23500; - const int moonriseMin = 12000; - const int moonriseMax = 13500; - const float sunriseLength = sunriseMax - sunriseMin; - const float moonriseLength = moonriseMax - moonriseMin; - - float mixLevel = 0; - int dayTime = gs->TimeOfDay; - if (dayTime < 0) - dayTime *= -1; - while (dayTime > 24000) - dayTime -= 24000; - if (dayTime > 0 && dayTime < moonriseMin || dayTime > sunriseMax) //day - mixLevel = 1.0; - if (dayTime > moonriseMax && dayTime < sunriseMin) //night - mixLevel = 0.0; - if (dayTime >= sunriseMin && dayTime <= sunriseMax) //sunrise - mixLevel = (dayTime - sunriseMin) / sunriseLength; - if (dayTime >= moonriseMin && dayTime <= moonriseMax) { //moonrise - float timePassed = (dayTime - moonriseMin); - mixLevel = 1.0 - (timePassed / moonriseLength); - } - - glUniform1f(glGetUniformLocation(skyShader->Program, "DayTime"), mixLevel); - - rendererSky.Render(renderState); - glCheckError(); } void RendererWorld::PrepareRender() { |