diff --git a/PlanetCreator/cw 6/src/ex_6_1.hpp b/PlanetCreator/cw 6/src/ex_6_1.hpp index cc125d2..56f1846 100644 --- a/PlanetCreator/cw 6/src/ex_6_1.hpp +++ b/PlanetCreator/cw 6/src/ex_6_1.hpp @@ -101,19 +101,6 @@ void loadModelToContext(std::string path, Core::RenderContext& context) } -void loadModelToContext2(std::string path, Core::RenderContext& context) -{ - Assimp::Importer import; - const aiScene* scene = import.ReadFile(path, aiProcess_Triangulate | aiProcess_FindInvalidData); - - if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) - { - std::cout << "ERROR::ASSIMP::" << import.GetErrorString() << std::endl; - return; - } - - context.initFromAssimpMesh2(scene->mMeshes[0]); -} namespace Plant { @@ -132,15 +119,10 @@ namespace Plant this->pos = glm::vec3(1, 0, 0); this->material = material; - //this->pos = glm::vec3((rand() % 100) / 100, (rand() % 100) / 100, (rand() % 100) / 100); } + float calcProbability(float xValue, float mean, float sd) - { - float temp = (xValue - mean) / sd * sqrt(2); - return (1 + erf(temp)) / 2; - } - float calcProbability2(float xValue, float mean, float sd) { float n = sd * 2 * sqrt(3.14); //normalization factor float p = exp(-pow(xValue - mean, 2) / (2 * pow(sd, 2))); // unnormalized pdf @@ -209,9 +191,7 @@ PlanetParams populatePlanet(PlanetParams planet, std::vector plant int j = 0; std::cout << "Plant Probabilities:" << std::endl; for (auto& plant : plants) { - - //TODO: add humidity calculations - probability = plant.calcProbability2(planet.humidity, plant.humMean, plant.humSD) * plant.calcProbability2(planet.temperature, plant.tempMean, plant.tempSD); + probability = plant.calcProbability(planet.humidity, plant.humMean, plant.humSD) * plant.calcProbability(planet.temperature, plant.tempMean, plant.tempSD); std::cout << probability << std::endl; probability = int(probability * PRECISION); std::tupleprobIdPair = std::make_tuple(j, probability); @@ -272,7 +252,7 @@ PlanetParams populatePlanet(PlanetParams planet, std::vector plant } -PlanetParams populatePlanet2(PlanetParams planet, std::vector plants) +PlanetParams populatePlanetInstancingDemo(PlanetParams planet, std::vector plants) { int HOW_MANY_PLANTS = 1000; @@ -389,13 +369,11 @@ void DrawContextInstanced(Core::RenderContext& context, std::vector t } glUniform3f(glGetUniformLocation(program, "lightPos"), sunPosition.x, sunPosition.y, sunPosition.z); - //Material glUniform1f(glGetUniformLocation(program, "shininess"), material.Ns); glUniform3f(glGetUniformLocation(program, "ambientColor"), material.Ka.r, material.Ka.g, material.Ka.b); glUniform3f(glGetUniformLocation(program, "specularColor"), material.Ks.r, material.Ks.g, material.Ks.b); glUniform3f(glGetUniformLocation(program, "emissiveColor"), material.Ke.r, material.Ke.g, material.Ke.b); glUniform1f(glGetUniformLocation(program, "opticalDensity"), material.Ni); - //glUniform1f(glGetUniformLocation(program, "dissolve"), material.d); glUniform1i(glGetUniformLocation(program, "illuminationModel"), material.illum); glUniform1f(glGetUniformLocation(program, "metallic"), 0.05); glUniform1f(glGetUniformLocation(program, "roughness"), 0.9); @@ -428,21 +406,7 @@ struct ModelContext { float aspectRatio = 1.f; -bool DoTheImportThing(const std::string& pFile) { - // Create an instance of the Importer class - Assimp::Importer importer; - // And have it read the given file with some example postprocessing - // Usually - if speed is not the most important aspect for you - you'll - // probably to request more postprocessing than we do in this example. - const aiScene* scene = importer.ReadFile(pFile, - aiProcess_CalcTangentSpace | - aiProcess_Triangulate | - aiProcess_JoinIdenticalVertices | - aiProcess_SortByPType); - return scene; - -} glm::mat4 createCameraMatrix() { glm::vec3 cameraSide = glm::normalize(glm::cross(cameraDir, glm::vec3(0.f, 1.f, 0.f))); @@ -482,7 +446,7 @@ void renderImGui() { } if (ImGui::Button("Instancing")) { planets.clear(); - newPlanetParams = populatePlanet2(newPlanetParams, plant_specimens); + newPlanetParams = populatePlanetInstancingDemo(newPlanetParams, plant_specimens); planets.push_back(newPlanetParams); newPlanetParams.Plant_info.clear(); newPlanetParams.Plant_type_count.clear(); @@ -646,7 +610,6 @@ void drawObjectColor(Core::RenderContext& context, glm::mat4 modelMatrix, glm::v glUniformMatrix4fv(glGetUniformLocation(prog, "transformation"), 1, GL_FALSE, (float*)&transformation); glUniformMatrix4fv(glGetUniformLocation(prog, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix); glUniform3f(glGetUniformLocation(prog, "color"), color.x, color.y, color.z); - //glUniform3f(glGetUniformLocation(prog, "lightPos"), 0,0,0); glUniform3f(glGetUniformLocation(program, "lightPos"), sunPosition.x, sunPosition.y, sunPosition.z); @@ -679,20 +642,7 @@ void renderSun() { } -void drawObjectBiomes(Core::RenderContext& context, glm::mat4 modelMatrix, GLuint program) { - GLuint prog = program; - glUseProgram(prog); - glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix(); - glm::mat4 transformation = viewProjectionMatrix * modelMatrix; - glUniformMatrix4fv(glGetUniformLocation(prog, "transformation"), 1, GL_FALSE, (float*)&transformation); - glUniformMatrix4fv(glGetUniformLocation(prog, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix); - glUniform3f(glGetUniformLocation(program, "lightPos"), sunPosition.x, sunPosition.y, sunPosition.z); - - Core::DrawContext(context); - glUseProgram(0); - -} void drawObjectTexture(Core::RenderContext& context, glm::mat4 modelMatrix, GLuint textureID, GLuint program) { program; glUseProgram(program); @@ -722,7 +672,6 @@ void drawObjectTexture_plant(Core::RenderContext& context, glm::mat4 modelMatrix glUniform3f(glGetUniformLocation(program, "specularColor"), material.Ks.r, material.Ks.g, material.Ks.b); glUniform3f(glGetUniformLocation(program, "emissiveColor"), material.Ke.r, material.Ke.g, material.Ke.b); glUniform1f(glGetUniformLocation(program, "opticalDensity"), material.Ni); - //glUniform1f(glGetUniformLocation(program, "dissolve"), material.d); glUniform1i(glGetUniformLocation(program, "illuminationModel"), material.illum); glUniform1f(glGetUniformLocation(program, "metallic"), 0.05); glUniform1f(glGetUniformLocation(program, "roughness"), 0.2); @@ -739,18 +688,6 @@ void drawObjectTexture_plantInstanced(Core::RenderContext& context, std::vector< glm::mat4 transformation = viewProjectionMatrix * matrix; transformations.push_back(transformation); } - //glUniform3f(glGetUniformLocation(program, "lightPos"), 0, 0, 0); - ////Material - //glUniform1f(glGetUniformLocation(program, "shininess"), material.Ns); - //glUniform3f(glGetUniformLocation(program, "ambientColor"), material.Ka.r, material.Ka.g, material.Ka.b); - //glUniform3f(glGetUniformLocation(program, "specularColor"), material.Ks.r, material.Ks.g, material.Ks.b); - //glUniform3f(glGetUniformLocation(program, "emissiveColor"), material.Ke.r, material.Ke.g, material.Ke.b); - //glUniform1f(glGetUniformLocation(program, "opticalDensity"), material.Ni); - ////glUniform1f(glGetUniformLocation(program, "dissolve"), material.d); - //glUniform1i(glGetUniformLocation(program, "illuminationModel"), material.illum); - //glUniform1f(glGetUniformLocation(program, "metallic"), 0.05); - //glUniform1f(glGetUniformLocation(program, "roughness"), 0.2); - DrawContextInstanced(context, transformations, modelMatrices, count, material, program); glUseProgram(0); } @@ -879,27 +816,12 @@ void renderScene(GLFWwindow* window) float firstTreeDuration = 20.0f; float secondTreeDuration = 8.0f; float thirdTreeDuration = 5.0f; - //static float elapsedTime = 0.0f; glm::vec3 plantPosition = glm::vec3(1.f, 0.f, 3.5f); glm::vec3 plantPosition1 = glm::vec3(1.f, 0.f, 1.5f); glm::vec3 plantPosition2 = glm::vec3(1.f, 0.f, 0.5f); glm::vec3 plantPosition3 = glm::vec3(1.f, 0.f, -0.5f); float scaleFactor = 0.025f; glm::mat4 plantModelMatrix = glm::translate(plantPosition) * glm::scale(glm::vec3(scaleFactor)); - //for (int i = 0; i < 5; i++) { - // placeObjectOnPlanet(plantContext, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(-0.1 * i, 0.f, 1.f)), sphereContext, planetMatrix); - // placeObjectOnPlanet(plantContext, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(0.1 * i, 0.f, -1.f)), sphereContext, planetMatrix); - // placeObjectOnPlanet(plantContext, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(-0.1 * i, 0.f, -1.f)), sphereContext, planetMatrix); - // placeObjectOnPlanet(plantContext, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(0.1 * i, 0.f, 0.f)), sphereContext, planetMatrix); - // placeObjectOnPlanet(plantContext, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(-0.1 * i, 0.f, 0.f)), sphereContext, planetMatrix); - //} - - //placeObjectOnPlanet(plantContext ,glm::scale(glm::mat4(),glm::vec3(0.2)), normalize(glm::vec3(1.f,0.f,1.f)), sphereContext, planetMatrix); - //placeObjectOnPlanet(plantContext, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(0.f, 0.f, -1.f)), sphereContext, planetMatrix); - - //drawObjectBiomes(plantContext, glm::eulerAngleY(glm::radians(60.f)) * glm::translate(glm::vec3(0.f, 0.f, 0.f)), programBiomes); - //drawObjectBiomes(plantContext, glm::eulerAngleY(glm::radians(90.f)) * glm::translate(glm::vec3(0.f, 0.f, 0.f)), programBiomes); - //drawObjectBiomes(plantContext, glm::eulerAngleX(30.f) * glm::translate(glm::vec3(0.f, 0.f, 0.f)), programBiomes); for (const auto& planet : planets) { glm::mat4 modelMatrix = glm::translate(planet.position) * glm::scale(glm::vec3(planet.size)); drawObjectTexture(sphereContext, modelMatrix, planet.texture, programTex); @@ -928,43 +850,17 @@ void renderScene(GLFWwindow* window) { current_type_plant_positions.push_back(std::get<1>(plant)); } - for (int i = 0; i < types_count; i++) - { - - //placeObjectOnPlanet(plant_specimens[std::get<0>(plant)].modelContext, glm::mat4(), 0.2, std::get<1>(plant), planet, plant_type_count); - - } - //for (const auto& plant : plants) - //TODO: REMOVE PLACEHOLDER - - //animateGrowingTree(elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, plant.pos, scaleFactor, plant_2_1_small_Context, plant_2_1_med_Context, plant_2_1Context, plantModelMatrix, plant2_1Material, program_pbr); - } skyPos = cameraPos; glm::mat4 skyMatrix = glm::scale(glm::vec3(skySize)); glm::mat4 skyTranslate = glm::translate(skyPos); drawSky(cubeContext, skyTranslate * skyMatrix, texture::background); - //placeObjectOnPlanet(plant2Context, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(1.0, 0.0, 1.0)), sphereContext, planetMatrix); glBindFramebuffer(GL_FRAMEBUFFER, 0); applyBloom(); renderSun(); - //drawObjectColor(plant2Context, plantModelMatrix, glm::vec3(1,1,1), program); -// drawObjectColor(plant3Context,glm::translate(glm::vec3(1.0f, 0.5f, 3.0f)) *glm::scale(glm::vec3(0.03f)) *glm::rotate(glm::mat4(1.0f), glm::radians(-90.0f), glm::vec3(1.0f, 0.0f, 0.0f)),glm::vec3(1, 1, 1), program); - //drawObjectTexture_plant(plant_1_1_small_Context, plantModelMatrix, plant3Material, program_pbr); - //drawObjectTexture_plant(plant_2_1_small_Context, plantModelMatrix, plant2_1Material, program_pbr); - - //drawObjectColor(plant2Context, plantModelMatrix, glm::vec3(1, 1, 1), program); - - - //animateGrowingTree(elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, plantPosition, scaleFactor, plant_1_1_small_Context, plant_1_1_med_Context, plant_1_1Context, plantModelMatrix, plant3Material, program_pbr); - - //animateGrowingTree(elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, plantPosition1, scaleFactor, plant_2_1_small_Context, plant_2_1_med_Context, plant_2_1Context, plantModelMatrix, plant2_1Material, program_pbr); - - //animateGrowingTree(elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, plantPosition2, scaleFactor, plant_2_1_small_Context, plant_2_1_med_Context, plant_2_1Context, plantModelMatrix, plant2_1Material, program_pbr); - renderImGui(); glfwSwapBuffers(window); } @@ -976,7 +872,6 @@ void framebuffer_size_callback(GLFWwindow* window, int width, int height) glViewport(0, 0, width, height); } -//TODO :REMOVE THIS @@ -999,24 +894,14 @@ void init(GLFWwindow* window) program = shaderLoader.CreateProgram("shaders/shader_5_1.vert", "shaders/shader_5_1.frag"); programTex = shaderLoader.CreateProgram("shaders/shader_5_1_tex.vert", "shaders/shader_5_1_tex.frag"); programSun = shaderLoader.CreateProgram("shaders/shader_5_sun.vert", "shaders/shader_5_sun.frag"); - programBiomes = shaderLoader.CreateProgram("shaders/shader_biomes.vert", "shaders/shader_biomes.frag"); program_pbr = shaderLoader.CreateProgram("shaders/shader_pbr.vert", "shaders/shader_pbr.frag"); program_pbr_instanced = shaderLoader.CreateProgram("shaders/shader_pbr_instanced.vert", "shaders/shader_pbr_instanced.frag"); program_sky = shaderLoader.CreateProgram("shaders/shader_sky.vert", "shaders/shader_sky.frag"); program_blur = shaderLoader.CreateProgram("shaders/blur.vert", "shaders/blur.frag"); program_bloom_final = shaderLoader.CreateProgram("shaders/bloom_final.vert", "shaders/bloom_final.frag"); - loadModelToContext2("./models/plants/polygon.obj", plantContext); loadModelToContext("./models/sphere.obj", sphereContext); - //plant 1-1 - loadModelToContext("./models/plant_1_1_zmn.obj", plant_1_1Context); - loadModelToContext("./models/plant_1_1_med_zmn.obj", plant_1_1_med_Context); - loadModelToContext("./models/plant_1_1_small_zmn.obj", plant_1_1_small_Context); - //plant 2-2 - loadModelToContext("./models/plant_2_1_small.obj", plant_2_1_small_Context); - loadModelToContext("./models/plant_2_1_med.obj", plant_2_1_med_Context); - loadModelToContext("./models/plant_2_1.obj", plant_2_1Context); - loadModelToContext2("./models/plant_4.ply", plant3Context); + // setupBuffers(plantContex_test); texture::earth = Core::LoadTexture("textures/earth2.png"); @@ -1031,9 +916,8 @@ void init(GLFWwindow* window) loadMTLAndGetTextureID("./models/plant_2_1_small.mtl", plant2_1Material); loadModelToContext("./models/cube.obj", cubeContext); texture::background = Core::LoadCubeMap("./textures/skyCut.jpg"); - plant_specimens.push_back(Plant::Plant(7, 5, 7, 5, "plant1_s", "./models/plant_1_1.obj", plant3Material)); - plant_specimens.push_back(Plant::Plant(5, 5, 5, 5, "plant1_m", "./models/plant_2_1.obj", plant2_1Material)); - + plant_specimens.push_back(Plant::Plant(40, 5, 40, 5, "drzewo_lisciaste", "./models/plant_1_1.obj", plant3Material)); + plant_specimens.push_back(Plant::Plant(25, 5, 25, 5, "drzewo_iglaste", "./models/plant_2_1.obj", plant2_1Material)); defaultTexture = Core::LoadTexture("textures/1.png"); if (defaultTexture == 0) { @@ -1084,17 +968,7 @@ void processInput(GLFWwindow* window) } -//// funkcja jest glowna petla -//void renderLoop(GLFWwindow* window) { -// while (!glfwWindowShouldClose(window)) -// { -// processInput(window); -// -// renderScene(window); -// glfwPollEvents(); -// } -//} -////} +