This commit is contained in:
s473621 2024-02-08 11:53:34 +01:00
parent 354af7cef5
commit 01482ed96a
34 changed files with 199896 additions and 60 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,24 +1,32 @@
 main.cpp  main.cpp
C:\Windows Kits\10\Include\10.0.22000.0\shared\minwindef.h(130,1): warning C4005: APIENTRY: изменение макроопределения C:\Windows Kits\10\Include\10.0.22000.0\shared\minwindef.h(130,1): warning C4005: APIENTRY: изменение макроопределения
C:\Users\neryt\Grafika2023\PlanetCreator\dependencies\glfw-3.3.8.bin.WIN32\include\GLFW\glfw3.h(123): message : см. предыдущее определение "APIENTRY" C:\Users\neryt\Grafika2023\PlanetCreator\dependencies\glfw-3.3.8.bin.WIN32\include\GLFW\glfw3.h(123): message : см. предыдущее определение "APIENTRY"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(136,15): warning C4244: инициализация: преобразование "double" в "float", возможна потеря данных C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(138,15): warning C4244: инициализация: преобразование "double" в "float", возможна потеря данных
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(157,23): warning C4244: инициализация: преобразование "double" в "float", возможна потеря данных C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(159,23): warning C4244: инициализация: преобразование "double" в "float", возможна потеря данных
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(205,30): warning C4244: =: преобразование "float" в "int", возможна потеря данных C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(207,30): warning C4244: =: преобразование "float" в "int", возможна потеря данных
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(211,20): warning C4244: =: преобразование "int" в "float", возможна потеря данных C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(213,20): warning C4244: =: преобразование "int" в "float", возможна потеря данных
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(365,61): warning C4305: аргумент: усечение из "double" в "GLfloat" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(388,61): warning C4305: аргумент: усечение из "double" в "GLfloat"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(366,61): warning C4305: аргумент: усечение из "double" в "GLfloat" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(389,61): warning C4305: аргумент: усечение из "double" в "GLfloat"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(441,16): warning C4305: инициализация: усечение из "double" в "float" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(467,16): warning C4305: инициализация: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(545,61): warning C4305: аргумент: усечение из "double" в "GLfloat" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(571,61): warning C4305: аргумент: усечение из "double" в "GLfloat"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(546,61): warning C4305: аргумент: усечение из "double" в "GLfloat" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(572,61): warning C4305: аргумент: усечение из "double" в "GLfloat"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(595,30): warning C4305: инициализация: усечение из "double" в "float" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(621,30): warning C4305: инициализация: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(644,17): warning C4244: инициализация: преобразование "double" в "float", возможна потеря данных C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(670,17): warning C4244: инициализация: преобразование "double" в "float", возможна потеря данных
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(759,13): warning C4244: инициализация: преобразование "double" в "float", возможна потеря данных C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(777,16): warning C4244: инициализация: преобразование "_Rep" в "unsigned int", возможна потеря данных
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(906,90): warning C4305: аргумент: усечение из "double" в "float" with
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(907,94): warning C4305: аргумент: усечение из "double" в "float" [
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(908,98): warning C4305: аргумент: усечение из "double" в "float" _Rep=std::chrono::system_clock::rep
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(909,100): warning C4305: аргумент: усечение из "double" в "float" ]
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(912,104): warning C4305: аргумент: усечение из "double" в "float" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(816,13): warning C4244: инициализация: преобразование "double" в "float", возможна потеря данных
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(913,94): warning C4305: аргумент: усечение из "double" в "float" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(983,90): warning C4305: аргумент: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(984,94): warning C4305: аргумент: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(985,98): warning C4305: аргумент: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(986,100): warning C4305: аргумент: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(989,104): warning C4305: аргумент: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(990,94): warning C4305: аргумент: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(991,102): warning C4305: аргумент: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(992,105): warning C4305: аргумент: усечение из "double" в "float"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(993,95): warning C4305: аргумент: усечение из "double" в "float"
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\tuple(158,47): warning C4244: инициализация: преобразование "_Ty" в "_Ty", возможна потеря данных C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\tuple(158,47): warning C4244: инициализация: преобразование "_Ty" в "_Ty", возможна потеря данных
with with
[ [
@ -94,8 +102,8 @@ C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.2
_Tag=std::_Unpack_tuple_t, _Tag=std::_Unpack_tuple_t,
_Tpl=std::tuple<int,float> _Tpl=std::tuple<int,float>
] ]
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(212): message : выполняется компиляция ссылки на экземпляр шаблон функции "std::tuple<int,int>::tuple<int,float,0>(std::tuple<int,float> &&) noexcept" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(214): message : выполняется компиляция ссылки на экземпляр шаблон функции "std::tuple<int,int>::tuple<int,float,0>(std::tuple<int,float> &&) noexcept"
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(212): message : выполняется компиляция ссылки на экземпляр шаблон функции "std::tuple<int,int>::tuple<int,float,0>(std::tuple<int,float> &&) noexcept" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(214): message : выполняется компиляция ссылки на экземпляр шаблон функции "std::tuple<int,int>::tuple<int,float,0>(std::tuple<int,float> &&) noexcept"
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\tuple(158,47): warning C4244: инициализация: преобразование "const int" в "_Ty", возможна потеря данных C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\tuple(158,47): warning C4244: инициализация: преобразование "const int" в "_Ty", возможна потеря данных
with with
[ [
@ -178,7 +186,7 @@ C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.2
_RanIt=std::tuple<int,int> *, _RanIt=std::tuple<int,int> *,
_Pr=bool (__cdecl *)(std::tuple<int,float>,std::tuple<int,float>) _Pr=bool (__cdecl *)(std::tuple<int,float>,std::tuple<int,float>)
] ]
C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(220): message : выполняется компиляция ссылки на экземпляр шаблон функции "void std::sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>,bool(__cdecl *)(std::tuple<int,float>,std::tuple<int,float>)>(const _RanIt,const _RanIt,_Pr)" C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(222): message : выполняется компиляция ссылки на экземпляр шаблон функции "void std::sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>,bool(__cdecl *)(std::tuple<int,float>,std::tuple<int,float>)>(const _RanIt,const _RanIt,_Pr)"
with with
[ [
_Ty=std::tuple<int,int>, _Ty=std::tuple<int,int>,
@ -186,8 +194,8 @@ C:\Users\neryt\Grafika2023\PlanetCreator\cw 6\src\ex_6_1.hpp(220): message : в
_Pr=bool (__cdecl *)(std::tuple<int,float>,std::tuple<int,float>) _Pr=bool (__cdecl *)(std::tuple<int,float>,std::tuple<int,float>)
] ]
Создание кода Создание кода
46 of 2621 functions ( 1.8%) were compiled, the rest were copied from previous compilation. 174 of 2522 functions ( 6.9%) were compiled, the rest were copied from previous compilation.
0 functions were new in current compilation 0 functions were new in current compilation
28 functions had inline decision re-evaluated but remain unchanged 41 functions had inline decision re-evaluated but remain unchanged
Создание кода завершено Создание кода завершено
grk-cw6.vcxproj -> C:\Users\neryt\Grafika2023\PlanetCreator\Release\grk-cw6.exe grk-cw6.vcxproj -> C:\Users\neryt\Grafika2023\PlanetCreator\Release\grk-cw6.exe

Binary file not shown.

Binary file not shown.

View File

@ -73,6 +73,8 @@
<None Include="shaders\shader_pbr.vert" /> <None Include="shaders\shader_pbr.vert" />
<None Include="shaders\shader_pbr_instanced.frag" /> <None Include="shaders\shader_pbr_instanced.frag" />
<None Include="shaders\shader_pbr_instanced.vert" /> <None Include="shaders\shader_pbr_instanced.vert" />
<None Include="shaders\shader_sky.frag" />
<None Include="shaders\shader_sky.vert" />
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{3952C396-B1C6-44CD-96DD-C1AC15D32978}</ProjectGuid> <ProjectGuid>{3952C396-B1C6-44CD-96DD-C1AC15D32978}</ProjectGuid>

View File

@ -144,7 +144,7 @@
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\ex_6_1.hpp"> <ClInclude Include="src\ex_6_1.hpp">
<Filter>Shader Files</Filter> <Filter>Source Files</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -185,5 +185,11 @@
<None Include="shaders\shader_pbr_instanced.vert"> <None Include="shaders\shader_pbr_instanced.vert">
<Filter>Shader Files</Filter> <Filter>Shader Files</Filter>
</None> </None>
<None Include="shaders\shader_sky.frag">
<Filter>Shader Files</Filter>
</None>
<None Include="shaders\shader_sky.vert">
<Filter>Shader Files</Filter>
</None>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -11,6 +11,6 @@ Pos=4,3
Size=218,129 Size=218,129
[Window][Dodawanie nowej planety] [Window][Dodawanie nowej planety]
Pos=23,7 Pos=16,7
Size=282,158 Size=282,158

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
#version 430 core
layout (location = 0) out vec4 out_color;
layout (location = 1) out vec4 BrightColor;
uniform samplerCube skybox;
in vec3 texCoord;
void main()
{
vec4 finalColor =texture(skybox,texCoord);
float brightness = dot(vec3(finalColor.x,finalColor.y, finalColor.z ), vec3(0.2126, 0.7152, 0.0722));
if(brightness > 1.0)
BrightColor = vec4(vec3(finalColor.x,finalColor.y, finalColor.z ), 1.0);
else
BrightColor = vec4(0.0, 0.0, 0.0, 1.0);
out_color = texture(skybox,texCoord);
}

View File

@ -0,0 +1,13 @@
#version 430 core
layout(location = 0) in vec3 vertexPosition;
uniform mat4 transformation;
out vec3 texCoord;
void main()
{
texCoord = vertexPosition;
gl_Position = transformation * vec4(vertexPosition, 1.0);
}

View File

@ -1,14 +1,14 @@
#include "Texture.h" #include "Texture.h"
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <iterator> #include <iterator>
#include <vector> #include <vector>
#include "SOIL/SOIL.h" #include "SOIL/SOIL.h"
typedef unsigned char byte; typedef unsigned char byte;
GLuint Core::LoadTexture( const char * filepath ) GLuint Core::LoadTexture(const char* filepath)
{ {
GLuint id; GLuint id;
glGenTextures(1, &id); glGenTextures(1, &id);
@ -20,7 +20,7 @@ GLuint Core::LoadTexture( const char * filepath )
int w, h; int w, h;
unsigned char* image = SOIL_load_image(filepath, &w, &h, 0, SOIL_LOAD_RGBA); unsigned char* image = SOIL_load_image(filepath, &w, &h, 0, SOIL_LOAD_RGBA);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D);
@ -28,12 +28,39 @@ GLuint Core::LoadTexture( const char * filepath )
return id; return id;
} }
GLuint Core::LoadCubeMap(const char* filepath) {
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_CUBE_MAP, id);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_REPEAT);
int w, h;
unsigned char* image = SOIL_load_image(filepath, &w, &h, 0, SOIL_LOAD_RGBA);
for (int i = 0; i < 6; i++) {
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
}
return id;
}
void Core::SetActiveTexture(GLuint textureID, const char * shaderVariableName, GLuint programID, int textureUnit) void Core::SetActiveTexture(GLuint textureID, const char* shaderVariableName, GLuint programID, int textureUnit)
{ {
glUniform1i(glGetUniformLocation(programID, shaderVariableName), textureUnit); glUniform1i(glGetUniformLocation(programID, shaderVariableName), textureUnit);
glActiveTexture(GL_TEXTURE0 + textureUnit); glActiveTexture(GL_TEXTURE0 + textureUnit);
glBindTexture(GL_TEXTURE_2D, textureID); glBindTexture(GL_TEXTURE_2D, textureID);
} }
void Core::SetActiveBackground(GLuint textureID, const char* shaderVariableName, GLuint programID, int textureUnit)
{
glUniform1i(glGetUniformLocation(programID, shaderVariableName), textureUnit);
glActiveTexture(GL_TEXTURE0 + textureUnit);
glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);
}

View File

@ -6,10 +6,13 @@
namespace Core namespace Core
{ {
GLuint LoadTexture(const char * filepath); GLuint LoadTexture(const char * filepath);
GLuint LoadCubeMap(const char* filepath);
// textureID - identyfikator tekstury otrzymany z funkcji LoadTexture // textureID - identyfikator tekstury otrzymany z funkcji LoadTexture
// shaderVariableName - nazwa zmiennej typu 'sampler2D' w shaderze, z ktora ma zostac powiazana tekstura // shaderVariableName - nazwa zmiennej typu 'sampler2D' w shaderze, z ktora ma zostac powiazana tekstura
// programID - identyfikator aktualnego programu karty graficznej // programID - identyfikator aktualnego programu karty graficznej
// textureUnit - indeks jednostki teksturujacej - liczba od 0 do 7. Jezeli uzywa sie wielu tekstur w jednym shaderze, to kazda z nich nalezy powiazac z inna jednostka. // textureUnit - indeks jednostki teksturujacej - liczba od 0 do 7. Jezeli uzywa sie wielu tekstur w jednym shaderze, to kazda z nich nalezy powiazac z inna jednostka.
void SetActiveTexture(GLuint textureID, const char * shaderVariableName, GLuint programID, int textureUnit); void SetActiveTexture(GLuint textureID, const char * shaderVariableName, GLuint programID, int textureUnit);
void SetActiveBackground(GLuint textureID, const char* shaderVariableName, GLuint programID, int textureUnit);
} }

View File

@ -17,6 +17,8 @@
#include <assimp/scene.h> #include <assimp/scene.h>
#include <assimp/postprocess.h> #include <assimp/postprocess.h>
#include <string> #include <string>
#include <random>
#include <chrono>
#include "imgui.h" #include "imgui.h"
#include "imgui_impl_glfw.h" #include "imgui_impl_glfw.h"
@ -277,17 +279,29 @@ namespace texture {
GLuint earthNormal; GLuint earthNormal;
GLuint asteroidNormal; GLuint asteroidNormal;
} }
GLuint program_sky;
GLuint program_blur;
GLuint program_bloom_final;
GLuint program; GLuint program;
GLuint programSun; GLuint programSun;
GLuint programTex; GLuint programTex;
GLuint program_pbr; GLuint program_pbr;
GLuint program_pbr_instanced; GLuint program_pbr_instanced;
GLuint plantProgram;
Core::Shader_Loader shaderLoader; Core::Shader_Loader shaderLoader;
Core::RenderContext cubeContext;
GLuint plantProgram;
GLuint programBiomes; GLuint programBiomes;
glm::vec3 sunPosition = glm::vec3(0.0f, 10.0f, 10.0f); // Позиция солнца
glm::vec3 sunColor = glm::vec3(1.0f, 1.0f, 1.0f); // Цвет солнца
glm::vec3 skyPos = glm::vec3(0.f, 0.f, 0.f);
float skySize = 4.f;
Core::RenderContext plantContext; Core::RenderContext plantContext;
Core::RenderContext sphereContext; Core::RenderContext sphereContext;
@ -299,14 +313,23 @@ Core::RenderContext plant_2_1Context;
Core::RenderContext plant_2_1_small_Context; Core::RenderContext plant_2_1_small_Context;
Core::RenderContext plant_2_1_med_Context; Core::RenderContext plant_2_1_med_Context;
Core::RenderContext plant_4_1Context;
Core::RenderContext plant_4_1_small_Context;
Core::RenderContext plant_4_1_med_Context;
Core::RenderContext plant_7_1Context;
Core::RenderContext plant_7_1_small_Context;
Core::RenderContext plant_7_1_med_Context;
Core::RenderContext plant3Context; Core::RenderContext plant3Context;
Core::RenderContext plant2Context; Core::RenderContext plant2Context;
Core::RenderContext plant2_1Context; Core::RenderContext plant2_1Context;
glm::vec3 cameraPos = glm::vec3(-4.f, 0, 0); glm::vec3 cameraPos = glm::vec3(-4.f, 0, 0);
glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f); glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f);
glm::vec3 sunPosition = glm::vec3(0.0f, 0.0f, 0.0f); // Позиция солнца //glm::vec3 sunPosition = glm::vec3(0.0f, 0.0f, 0.0f); // Позиция солнца
glm::vec3 sunColor = glm::vec3(1.0f, 1.0f, 1.0f); // Цвет солнца //glm::vec3 sunColor = glm::vec3(1.0f, 1.0f, 1.0f); // Цвет солнца
@ -375,7 +398,9 @@ void DrawContextInstanced(Core::RenderContext& context, std::vector<glm::mat4> t
glBindVertexArray(0); glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0);
//glClear(GL_ELEMENT_ARRAY_BUFFER);
glClear(GL_ARRAY_BUFFER);
} }
float aspectRatio = 1.f; float aspectRatio = 1.f;
@ -425,6 +450,7 @@ void renderImGui() {
ImGui::SliderFloat("Temperatura", &newPlanetParams.temperature, 0.0f, 10.0f); // Слайдер для осадков ImGui::SliderFloat("Temperatura", &newPlanetParams.temperature, 0.0f, 10.0f); // Слайдер для осадков
if (ImGui::Button("Dodac")) { if (ImGui::Button("Dodac")) {
//planets.clear();
newPlanetParams = populatePlanet(newPlanetParams, plant_specimens); newPlanetParams = populatePlanet(newPlanetParams, plant_specimens);
planets.push_back(newPlanetParams); planets.push_back(newPlanetParams);
} }
@ -544,7 +570,7 @@ void drawObjectTexture_plant(Core::RenderContext &context, glm::mat4 modelMatrix
glUniform1i(glGetUniformLocation(program, "illuminationModel"), material.illum); glUniform1i(glGetUniformLocation(program, "illuminationModel"), material.illum);
glUniform1f(glGetUniformLocation(program, "metallic"), 0.05); glUniform1f(glGetUniformLocation(program, "metallic"), 0.05);
glUniform1f(glGetUniformLocation(program, "roughness"), 0.2); glUniform1f(glGetUniformLocation(program, "roughness"), 0.2);
std::cout << "DRAWWW " << std::endl; // std::cout << "DRAWWW " << std::endl;
Core::DrawContext(context); Core::DrawContext(context);
glUseProgram(0); glUseProgram(0);
} }
@ -681,6 +707,7 @@ struct TexturePlantData {
}; };
std::vector<TexturePlantData> texturePlantDataList; std::vector<TexturePlantData> texturePlantDataList;
#include <cmath> #include <cmath>
#include <random>
float thirdTreeStartScale = 0.0f; float thirdTreeStartScale = 0.0f;
float secTreeStartScale = 0.0f; float secTreeStartScale = 0.0f;
void animateGrowingTree(float& elapsedTime, float deltaTime, float firstTreeDuration, float secondTreeDuration, float thirdTreeDuration, void animateGrowingTree(float& elapsedTime, float deltaTime, float firstTreeDuration, float secondTreeDuration, float thirdTreeDuration,
@ -725,15 +752,15 @@ void animateGrowingTree(float& elapsedTime, float deltaTime, float firstTreeDura
elapsedTime += deltaTime; elapsedTime += deltaTime;
} }
else { else {
elapsedTime = 0.0; //elapsedTime = 0.0;
//plantModelMatrix = glm::translate(plantPosition) * glm::scale(glm::vec3(scaleFactor + scaleFactor)); //plantModelMatrix = glm::translate(plantPosition) * glm::scale(glm::vec3(scaleFactor + scaleFactor));
plantModelMatrix = plantModelMatrix * glm::scale(glm::vec3(thirdTreeStartScale*3 + scaleFactor)); //plantModelMatrix = plantModelMatrix * glm::scale(glm::vec3(thirdTreeStartScale*3 + scaleFactor));
TexturePlantData newData; //TexturePlantData newData;
newData.thirdTreeContext = thirdTreeContext; //newData.thirdTreeContext = thirdTreeContext;
newData.plantModelMatrix = plantModelMatrix; //newData.plantModelMatrix = plantModelMatrix;
newData.plant3Material = plant3Material; //newData.plant3Material = plant3Material;
newData.program_pbr = program_pbr; //newData.program_pbr = program_pbr;
texturePlantDataList.push_back(newData); //texturePlantDataList.push_back(newData);
// drawObjectTexture_plant(thirdTreeContext, plantModelMatrix, plant3Material, program_pbr); // drawObjectTexture_plant(thirdTreeContext, plantModelMatrix, plant3Material, program_pbr);
} }
@ -746,15 +773,45 @@ void animateGrowingTree(float& elapsedTime, float deltaTime, float firstTreeDura
Core::RenderContext& getRandomContext(Plant::Plant& plant) {
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine engine(seed);
std::uniform_int_distribution<int> distribution(0, 2); // Диапазон от 0 до 2 включительно
int choice = distribution(engine);
switch (choice) {
case 0:
return plant.modelContext;
case 1:
return plant.stageContext1;
case 2:
return plant.stageContext2;
default:
return plant.stageContext3; // На случай, если что-то пойдет не так, вернем stageContext3
}
}
void drawSky(Core::RenderContext& context, glm::mat4 modelMatrix, GLuint texture) {
glUseProgram(program_sky);
Core::SetActiveBackground(texture, "skybox", program_sky, 0);
glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix();
glm::mat4 transformation = viewProjectionMatrix * modelMatrix;
glUniformMatrix4fv(glGetUniformLocation(program_sky, "transformation"), 1, GL_FALSE, (float*)&transformation);
glUniformMatrix4fv(glGetUniformLocation(program_sky, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix);
Core::DrawContext(context);
glUseProgram(0);
}
void renderScene(GLFWwindow* window) void renderScene(GLFWwindow* window)
{ {
glClearColor(0.05f, 0.05f, 0.2f, 1.0f); //glClearColor(0.0f, 0.3f, 0.3f, 1.0f);
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// glBindFramebuffer(GL_FRAMEBUFFER, hdrFBO);
glClearColor(0.0f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glm::mat4 transformation; glm::mat4 transformation;
float time = glfwGetTime(); float time = glfwGetTime();
@ -801,24 +858,30 @@ void renderScene(GLFWwindow* window)
// Теперь используем материал, связанный с каждым растением // Теперь используем материал, связанный с каждым растением
// const Material& plantMaterial = plant.material; // Предполагаем, что у Plant есть поле Material material // const Material& plantMaterial = plant.material; // Предполагаем, что у Plant есть поле Material material
// static Core::RenderContext& chosenContext = getRandomContext(const_cast<Plant::Plant&>(plant));
// drawObjectTexture_plant(const_cast<Plant::Plant&>(plant).modelContext, plantMatrix, plant3Material, program_pbr); drawObjectTexture_plant(const_cast<Plant::Plant&>(plant).modelContext, plantMatrix, plant3Material, program_pbr);
//drawObjectTexture_plant(chosenContext, plantMatrix, plant3Material, program_pbr);
std::vector<glm::vec3> positions = { plant.pos }; std::vector<glm::vec3> positions = { plant.pos };
//animateGrowingTree(const_cast<Plant::Plant&>(plant).elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, plant.pos, scaleFactor, const_cast<Plant::Plant&>(plant).stageContext1, const_cast<Plant::Plant&>(plant).stageContext2, const_cast<Plant::Plant&>(plant).stageContext3, plantMatrix, plant2_1Material, program_pbr); //animateGrowingTree(const_cast<Plant::Plant&>(plant).elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, plant.pos, scaleFactor, const_cast<Plant::Plant&>(plant).stageContext1, const_cast<Plant::Plant&>(plant).stageContext2, const_cast<Plant::Plant&>(plant).stageContext3, plantMatrix, plant2_1Material, program_pbr);
animateGrowingTree(const_cast<Plant::Plant&>(plant).elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, positions, scaleFactor, const_cast<Plant::Plant&>(plant).stageContext1, const_cast<Plant::Plant&>(plant).stageContext2, const_cast<Plant::Plant&>(plant).stageContext3, plantMatrix, plant2_1Material, program_pbr, planet); //animateGrowingTree(const_cast<Plant::Plant&>(plant).elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, positions, scaleFactor, const_cast<Plant::Plant&>(plant).stageContext1, const_cast<Plant::Plant&>(plant).stageContext2, const_cast<Plant::Plant&>(plant).stageContext3, plantMatrix, plant2_1Material, program_pbr_instanced, planet);
//drawObjectTexture_plantInstanced(const_cast<Plant::Plant&>(plant).stageContext3, plant3Material, program_pbr_instanced, 15, positions, planet, plantMatrix); // drawObjectTexture_plantInstanced(const_cast<Plant::Plant&>(plant).stageContext3, plant3Material, program_pbr, 15, positions, planet, plantMatrix);
//(Core::RenderContext & context, std::vector<glm::mat4> modelMatrices, Material & material, GLuint program, int count, std::vector<glm::vec3>placePoints, PlanetParams planetParams) //(Core::RenderContext & context, std::vector<glm::mat4> modelMatrices, Material & material, GLuint program, int count, std::vector<glm::vec3>placePoints, PlanetParams planetParams)
} }
// animateGrowingTree(const_cast<Plant::Plant&>(plant).elapsedTime, deltaTime, firstTreeDuration, secondTreeDuration, thirdTreeDuration, positions, scaleFactor, const_cast<Plant::Plant&>(plant).stageContext1, const_cast<Plant::Plant&>(plant).stageContext2, const_cast<Plant::Plant&>(plant).stageContext3, plantMatrix, plant2_1Material, program_pbr, planet);
} }
//placeObjectOnPlanet(plant2Context, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(1.0, 0.0, 1.0)), sphereContext, planetMatrix); //placeObjectOnPlanet(plant2Context, glm::scale(glm::mat4(), glm::vec3(0.2)), normalize(glm::vec3(1.0, 0.0, 1.0)), sphereContext, planetMatrix);
renderSun(); skyPos = cameraPos;
glm::mat4 skyMatrix = glm::scale(glm::vec3(skySize));
glm::mat4 skyTranslate = glm::translate(skyPos);
drawSky(cubeContext, skyTranslate * skyMatrix, Core::LoadTexture("textures/1.png"));
//drawObjectColor(plant2Context, plantModelMatrix, glm::vec3(1,1,1), program); //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); //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_1_1_small_Context, plantModelMatrix, plant3Material, program_pbr);
//drawObjectTexture_plant(plant_2_1_small_Context, plantModelMatrix, plant2_1Material, program_pbr); //drawObjectTexture_plant(plant_2_1_small_Context, plantModelMatrix, plant2_1Material, program_pbr);
@ -832,6 +895,7 @@ void renderScene(GLFWwindow* window)
//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); //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);
//glfwSwapBuffers(window); //glfwSwapBuffers(window);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
} }
void framebuffer_size_callback(GLFWwindow* window, int width, int height) void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{ {
@ -879,6 +943,10 @@ void init(GLFWwindow* window)
programBiomes = shaderLoader.CreateProgram("shaders/shader_biomes.vert", "shaders/shader_biomes.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 = 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_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); loadModelToContext2("./models/plants/polygon.obj", plantContext);
loadModelToContext("./models/sphere.obj", sphereContext); loadModelToContext("./models/sphere.obj", sphereContext);
@ -892,6 +960,15 @@ void init(GLFWwindow* window)
loadModelToContext("./models/plant_2_1.obj", plant_2_1Context); loadModelToContext("./models/plant_2_1.obj", plant_2_1Context);
loadModelToContext2("./models/plant_4.ply", plant3Context); loadModelToContext2("./models/plant_4.ply", plant3Context);
loadModelToContext("./models/plant_3_1_small.obj", plant_4_1_small_Context);
loadModelToContext("./models/plant_3_1_med.obj", plant_4_1_med_Context);
loadModelToContext("./models/plant_3_1.obj", plant_4_1Context);
loadModelToContext("./models/plant_7_1_small.obj", plant_7_1_small_Context);
loadModelToContext("./models/plant_7_1_med.obj", plant_7_1_med_Context);
loadModelToContext("./models/plant_7_1.obj", plant_7_1Context);
// setupBuffers(plantContex_test); // setupBuffers(plantContex_test);
texture::earth=Core::LoadTexture("textures/earth2.png"); texture::earth=Core::LoadTexture("textures/earth2.png");
texture::clouds = Core::LoadTexture("textures/clouds.jpg"); texture::clouds = Core::LoadTexture("textures/clouds.jpg");
@ -903,14 +980,18 @@ void init(GLFWwindow* window)
loadMTLAndGetTextureID("./models/plant_1_1.mtl", plant3Material); loadMTLAndGetTextureID("./models/plant_1_1.mtl", plant3Material);
loadMTLAndGetTextureID("./models/plant_2_1_small.mtl", plant2_1Material); loadMTLAndGetTextureID("./models/plant_2_1_small.mtl", plant2_1Material);
plant_specimens.push_back(Plant::Plant(1, 0.99, 1, 1, "testPlant2", "./models/plant_2_1")); plant_specimens.push_back(Plant::Plant(1, 0.99, 1, 1, "testPlant2", "./models/plant_3_1"));
plant_specimens.push_back(Plant::Plant(1, 0.95, 1, 1, "testPlantXXXXX", "./models/plant_2_1")); plant_specimens.push_back(Plant::Plant(1, 0.95, 1, 1, "testPlantXXXXX", "./models/plant_2_1"));
plant_specimens.push_back(Plant::Plant(1, 0.93, 1, 1, "testPlantAAAAAAAAA", "./models/plant_2_1")); plant_specimens.push_back(Plant::Plant(1, 0.93, 1, 1, "testPlantAAAAAAAAA", "./models/plant_7_1"));
plant_specimens.push_back(Plant::Plant(1, 0.90, 1, 1, "testPlantCCCCCCCCCCC", "./models/plant_1_1")); plant_specimens.push_back(Plant::Plant(1, 0.90, 1, 1, "testPlantCCCCCCCCCCC", "./models/plant_3_1"));
plant_specimens.push_back(Plant::Plant(1, 0.5, 1, 1, "testPlantBBBBBBBBB", "./models/plant_2_1")); plant_specimens.push_back(Plant::Plant(1, 0.5, 1, 1, "testPlantBBBBBBBBB", "./models/plant_2_1"));
plant_specimens.push_back(Plant::Plant(1, 1, 1, 1, "testPlantFFFFFFFFFFFF", "./models/plant_2_1")); plant_specimens.push_back(Plant::Plant(1, 1, 1, 1, "testPlantFFFFFFFFFFFF", "./models/plant_7_1"));
plant_specimens.push_back(Plant::Plant(1, 0.2, 1, 1, "testPlant!!!!!!!!!!!!!!!!", "./models/plant_2_1")); plant_specimens.push_back(Plant::Plant(1, 0.2, 1, 1, "testPlant!!!!!!!!!!!!!!!!", "./models/plant_3_1"));
plant_specimens.push_back(Plant::Plant(1, 0.1, 1, 1, "testPlant_MAYBE", "./models/plant_2_1")); plant_specimens.push_back(Plant::Plant(1, 0.1, 1, 1, "testPlant_MAYBE", "./models/plant_7_1"));
plant_specimens.push_back(Plant::Plant(1, 0.85, 1, 1, "testPlantFFFFFFFFFFFF1", "./models/plant_2_1"));
plant_specimens.push_back(Plant::Plant(1, 0.2, 1, 1, "testPlant!!!!!!!!!!!!!!!!1", "./models/plant_3_1"));
plant_specimens.push_back(Plant::Plant(1, 0.1, 1, 1, "testPlant_MAYBE1", "./models/plant_7_1"));
defaultTexture = Core::LoadTexture("textures/1.png"); defaultTexture = Core::LoadTexture("textures/1.png");
if (defaultTexture == 0) { if (defaultTexture == 0) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB