diff --git a/Debug/grk-cw9.exe b/Debug/grk-cw9.exe index 74c4e19..cc84172 100644 Binary files a/Debug/grk-cw9.exe and b/Debug/grk-cw9.exe differ diff --git a/Debug/grk-cw9.pdb b/Debug/grk-cw9.pdb index 189195f..b7afe07 100644 Binary files a/Debug/grk-cw9.pdb and b/Debug/grk-cw9.pdb differ diff --git a/cw 9/Debug/Laser.obj b/cw 9/Debug/Laser.obj index 8df560f..9e4aaf7 100644 Binary files a/cw 9/Debug/Laser.obj and b/cw 9/Debug/Laser.obj differ diff --git a/cw 9/Debug/SpaceShip.obj b/cw 9/Debug/SpaceShip.obj index a08547e..7029770 100644 Binary files a/cw 9/Debug/SpaceShip.obj and b/cw 9/Debug/SpaceShip.obj differ diff --git a/cw 9/Debug/grk-cw9.log b/cw 9/Debug/grk-cw9.log index d3131de..82455ef 100644 --- a/cw 9/Debug/grk-cw9.log +++ b/cw 9/Debug/grk-cw9.log @@ -1,71 +1,39 @@ - Box.cpp - Camera.cpp - Laser.cpp - main.cpp + main.cpp C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared\minwindef.h(130,1): warning C4005: 'APIENTRY': macro redefinition C:\Users\arciom\Desktop\GRK_game_scene\dependencies\glfw-3.3.8.bin.WIN32\include\GLFW\glfw3.h(123): message : see previous definition of 'APIENTRY' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(79,30): warning C4305: 'initializing': truncation from 'double' to 'float' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(98,38): warning C4305: '=': truncation from 'double' to 'float' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(121,16): warning C4305: 'initializing': truncation from 'double' to 'float' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(171,13): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(194,13): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(211,13): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(218,108): warning C4305: 'argument': truncation from 'double' to 'T' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(100,30): warning C4305: 'initializing': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(132,38): warning C4305: '=': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(155,16): warning C4305: 'initializing': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(215,13): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(277,13): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(299,13): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(306,108): warning C4305: 'argument': truncation from 'double' to 'T' with [ T=float ] -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(226,87): warning C4305: 'argument': truncation from 'double' to 'T' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(320,87): warning C4305: 'argument': truncation from 'double' to 'T' with [ T=float ] -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(226,223): warning C4305: 'argument': truncation from 'double' to 'float' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(229,59): warning C4305: 'argument': truncation from 'double' to 'T' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(320,223): warning C4305: 'argument': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(323,59): warning C4305: 'argument': truncation from 'double' to 'T' with [ T=float ] -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(230,37): warning C4305: 'argument': truncation from 'double' to 'float' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(263,2): warning C4305: 'argument': truncation from 'double' to 'float' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(404,21): warning C4305: '-=': truncation from 'double' to 'float' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(406,21): warning C4305: '+=': truncation from 'double' to 'float' -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(418,43): warning C4244: 'argument': conversion from 'double' to 'float', possible loss of data -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(421,28): warning C4305: 'argument': truncation from 'double' to 'float' - Render_Utils.cpp - Shader_Loader.cpp - SpaceShip.cpp - Texture.cpp - Generating Code... - image_DXT.c -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\image_DXT.c(92,9): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. - image_helper.c -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\image_helper.c(325,1): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\image_helper.c(366,58): warning C4244: '=': conversion from 'double' to 'float', possible loss of data -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\image_helper.c(373,46): warning C4244: '=': conversion from 'float' to 'int', possible loss of data -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\image_helper.c(415,58): warning C4244: '=': conversion from 'double' to 'float', possible loss of data -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\image_helper.c(422,62): warning C4244: '=': conversion from 'float' to 'int', possible loss of data - SOIL.c -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\SOIL.c(1719,36): warning C4018: '<=': signed/unsigned mismatch -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\SOIL.c(1729,19): warning C4018: '<': signed/unsigned mismatch -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\SOIL.c(1841,6): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. - stb_image_aug.c -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(177,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(251,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(303,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(1557,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(2394,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(2709,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(2995,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(3209,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(3548,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stb_image_aug.c(3644,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stbi_DDS_aug_c.h(362,19): warning C4018: '>': signed/unsigned mismatch -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stbi_DDS_aug_c.h(366,19): warning C4018: '>': signed/unsigned mismatch -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stbi_DDS_aug_c.h(390,19): warning C4018: '<': signed/unsigned mismatch -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stbi_DDS_aug_c.h(427,19): warning C4018: '<': signed/unsigned mismatch -C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\SOIL\stbi_DDS_aug_c.h(498,14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. - Generating Code... +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(324,37): warning C4305: 'argument': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(392,2): warning C4305: 'argument': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(401,20): warning C4018: '<': signed/unsigned mismatch +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(403,47): warning C4305: 'argument': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(404,48): warning C4305: 'argument': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(487,21): warning C4018: '<': signed/unsigned mismatch +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(489,49): warning C4244: 'argument': conversion from 'double' to 'float', possible loss of data +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(639,21): warning C4305: '-=': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(641,21): warning C4305: '+=': truncation from 'double' to 'float' +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(669,21): warning C4018: '<': signed/unsigned mismatch +C:\Users\arciom\Desktop\GRK_game_scene\cw 9\src\ex_9_1.hpp(671,49): warning C4244: 'argument': conversion from 'double' to 'float', possible loss of data Box.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library grk-cw9.vcxproj -> C:\Users\arciom\Desktop\GRK_game_scene\Debug\grk-cw9.exe diff --git a/cw 9/Debug/grk-cw9.tlog/CL.command.1.tlog b/cw 9/Debug/grk-cw9.tlog/CL.command.1.tlog index 22fb9fe..600636d 100644 Binary files a/cw 9/Debug/grk-cw9.tlog/CL.command.1.tlog and b/cw 9/Debug/grk-cw9.tlog/CL.command.1.tlog differ diff --git a/cw 9/Debug/grk-cw9.tlog/CL.read.1.tlog b/cw 9/Debug/grk-cw9.tlog/CL.read.1.tlog index 883fb7e..f9908e0 100644 Binary files a/cw 9/Debug/grk-cw9.tlog/CL.read.1.tlog and b/cw 9/Debug/grk-cw9.tlog/CL.read.1.tlog differ diff --git a/cw 9/Debug/grk-cw9.tlog/CL.write.1.tlog b/cw 9/Debug/grk-cw9.tlog/CL.write.1.tlog index feb363a..ca19931 100644 Binary files a/cw 9/Debug/grk-cw9.tlog/CL.write.1.tlog and b/cw 9/Debug/grk-cw9.tlog/CL.write.1.tlog differ diff --git a/cw 9/Debug/main.obj b/cw 9/Debug/main.obj index 826a3a7..2d81f62 100644 Binary files a/cw 9/Debug/main.obj and b/cw 9/Debug/main.obj differ diff --git a/cw 9/Debug/vc142.idb b/cw 9/Debug/vc142.idb index 6582a2c..97ea76c 100644 Binary files a/cw 9/Debug/vc142.idb and b/cw 9/Debug/vc142.idb differ diff --git a/cw 9/Debug/vc142.pdb b/cw 9/Debug/vc142.pdb index 9eb1dc9..a4ff2e1 100644 Binary files a/cw 9/Debug/vc142.pdb and b/cw 9/Debug/vc142.pdb differ diff --git a/cw 9/grk-cw9.vcxproj b/cw 9/grk-cw9.vcxproj index 8a73ef5..286278b 100644 --- a/cw 9/grk-cw9.vcxproj +++ b/cw 9/grk-cw9.vcxproj @@ -49,6 +49,8 @@ + + {5BACD057-4B83-4CB6-A367-40A10BCE2149} diff --git a/cw 9/grk-cw9.vcxproj.filters b/cw 9/grk-cw9.vcxproj.filters index a6f6f35..9bbb6e5 100644 --- a/cw 9/grk-cw9.vcxproj.filters +++ b/cw 9/grk-cw9.vcxproj.filters @@ -127,5 +127,11 @@ Shader Files + + Shader Files + + + Shader Files + \ No newline at end of file diff --git a/cw 9/shader_shadowap_sun.frag b/cw 9/shader_shadowap_sun.frag new file mode 100644 index 0000000..036c1d3 --- /dev/null +++ b/cw 9/shader_shadowap_sun.frag @@ -0,0 +1,15 @@ +#version 430 core + +//in vec4 sunSpacePos; + + +//void calculateShadow() { +// vec3 sunSpacePosNormalized = 0.5 * vec3(sunSpacePos) + 0.5; +//} + +void main() { + //hell + +// calculateShadow(); + +} \ No newline at end of file diff --git a/cw 9/shader_shadowap_sun.vert b/cw 9/shader_shadowap_sun.vert new file mode 100644 index 0000000..4648239 --- /dev/null +++ b/cw 9/shader_shadowap_sun.vert @@ -0,0 +1,18 @@ +#version 430 core + +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec3 vertexNormal; +layout(location = 2) in vec2 vertexTexCoord; + +uniform mat4 viewProjectionMatrix; +uniform mat4 modelMatrix; + +//uniform mat4 LightVP; + +//out vec4 sunSpacePos; + +void main() +{ + gl_Position = viewProjectionMatrix * modelMatrix * vec4(vertexPosition, 1.0); +// sunSpacePos=LightVP*modelMatrix*vec4(vertexPosition,1); +} \ No newline at end of file diff --git a/cw 9/shaders/shader_9_1.frag b/cw 9/shaders/shader_9_1.frag index 550f6c1..e82d87a 100644 --- a/cw 9/shaders/shader_9_1.frag +++ b/cw 9/shaders/shader_9_1.frag @@ -36,6 +36,8 @@ in vec3 lightDirTS; in vec3 spotlightDirTS; in vec3 sunDirTS; +in vec4 sunSpacePos; + in vec3 test; float DistributionGGX(vec3 normal, vec3 H, float roughness){ @@ -99,6 +101,22 @@ vec3 PBRLight(vec3 lightDir, vec3 radiance, vec3 normal, vec3 V){ } +float calculateShadow() { + + vec3 sunSpacePosNormalized = 0.5 * (vec3(sunSpacePos) / sunSpacePos.w) + 0.5; + + vec4 closestDepth = texture2D(depthMap, sunSpacePosNormalized.xy); + + + if (closestDepth.r > sunSpacePosNormalized.z) { + return 1.0; + } + else { + return 0.0; + } +} + + void main() { //vec3 normal = vec3(0,0,1); @@ -112,7 +130,7 @@ void main() vec3 ambient = AMBIENT*color; - vec3 attenuatedlightColor = lightColor/pow(length(lightPos-worldPos),2); + vec3 attenuatedlightColor = lightColor/pow(length(lightPos-worldPos),2); //dla pocisku vec3 ilumination; ilumination = ambient+PBRLight(lightDir,attenuatedlightColor,normal,viewDir); @@ -126,7 +144,7 @@ void main() ilumination=ilumination+PBRLight(spotlightDir,attenuatedlightColor,normal,viewDir); //sun - ilumination=ilumination+PBRLight(sunDir,sunColor,normal,viewDir); + ilumination=ilumination+PBRLight(sunDir, calculateShadow() * sunColor,normal,viewDir); //dla pocisku outColor = vec4(vec3(1.0) - exp(-ilumination*exposition),1); diff --git a/cw 9/shaders/shader_9_1.vert b/cw 9/shaders/shader_9_1.vert index 750196d..91c3c9f 100644 --- a/cw 9/shaders/shader_9_1.vert +++ b/cw 9/shaders/shader_9_1.vert @@ -9,6 +9,8 @@ layout(location = 4) in vec3 vertexBitangent; uniform mat4 transformation; uniform mat4 modelMatrix; +uniform mat4 LightVP; + out vec3 vecNormal; out vec3 worldPos; @@ -22,6 +24,8 @@ out vec3 lightDirTS; out vec3 spotlightDirTS; out vec3 sunDirTS; +out vec4 sunSpacePos; + void main() { worldPos = (modelMatrix* vec4(vertexPosition,1)).xyz; @@ -40,4 +44,6 @@ void main() spotlightDirTS = TBN*SL; sunDirTS = TBN*sunDir; + sunSpacePos=LightVP*modelMatrix*vec4(vertexPosition,1); + } diff --git a/cw 9/shaders/shader_shadowap_sun.frag b/cw 9/shaders/shader_shadowap_sun.frag new file mode 100644 index 0000000..ad0b0dd --- /dev/null +++ b/cw 9/shaders/shader_shadowap_sun.frag @@ -0,0 +1,5 @@ +#version 430 core + +void main() +{ +} \ No newline at end of file diff --git a/cw 9/shaders/shader_shadowap_sun.vert b/cw 9/shaders/shader_shadowap_sun.vert new file mode 100644 index 0000000..c018240 --- /dev/null +++ b/cw 9/shaders/shader_shadowap_sun.vert @@ -0,0 +1,13 @@ +#version 430 core + +layout(location = 0) in vec3 vertexPosition; +layout(location = 1) in vec3 vertexNormal; +layout(location = 2) in vec2 vertexTexCoord; + +uniform mat4 viewProjectionMatrix; +uniform mat4 modelMatrix; + +void main() +{ + gl_Position = viewProjectionMatrix * modelMatrix * vec4(vertexPosition, 1.0); +} \ No newline at end of file diff --git a/cw 9/src/ex_9_1.hpp b/cw 9/src/ex_9_1.hpp index eedb449..69bf68c 100644 --- a/cw 9/src/ex_9_1.hpp +++ b/cw 9/src/ex_9_1.hpp @@ -69,6 +69,7 @@ GLuint program; GLuint programSun; GLuint programTest; GLuint programTex; +GLuint programDepth; GLuint programLaser; @@ -194,6 +195,16 @@ void drawObjectPBR(Core::RenderContext& context, glm::mat4 modelMatrix, glm::vec glUniform3f(glGetUniformLocation(program, "spotlightPos"), spotlightPos.x, spotlightPos.y, spotlightPos.z); glUniform3f(glGetUniformLocation(program, "spotlightColor"), spotlightColor.x, spotlightColor.y, spotlightColor.z); glUniform1f(glGetUniformLocation(program, "spotlightPhi"), spotlightPhi); + + // + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, depthMap); + + glm::mat4 lightVP = glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 40.0f) * glm::lookAt(sunPos, sunPos - sunDir, glm::vec3(0, 1, 0)); + glUniformMatrix4fv(glGetUniformLocation(program, "LightVP"), 1, GL_FALSE, (float*)&lightVP); + // + + Core::DrawContext(context); } @@ -224,14 +235,57 @@ void drawLaser(Laser laser, Core::RenderContext laserContext, float dyst) { } +void initDepthMap() { + glGenFramebuffers(1, &depthMapFBO); + + glGenTextures(1, &depthMap); + glBindTexture(GL_TEXTURE_2D, depthMap); + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, + SHADOW_WIDTH, SHADOW_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + + glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthMap, 0); + glDrawBuffer(GL_NONE); + glReadBuffer(GL_NONE); + glBindFramebuffer(GL_FRAMEBUFFER, 0); +} + + +void drawObjectDepth(Core::RenderContext context, glm::mat4 viewProjectionMatrix, glm::mat4 modelMatrix) { + + /*glm::mat4 lightProjection = glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 30.0f); + + viewProjectionMatrix = glm::lookAt(sunPos, sunPos - sunDir, glm::vec3(0, 1, 0));*/ + + glUseProgram(programDepth); + glUniformMatrix4fv(glGetUniformLocation(programDepth, "viewProjectionMatrix"), 1, GL_FALSE, (float*)&viewProjectionMatrix); + glUniformMatrix4fv(glGetUniformLocation(programDepth, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix); + glUseProgram(program); + Core::DrawContext(context); + + + +} + + void renderShadowapSun() { float time = glfwGetTime(); - glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT); + //glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT); //uzupelnij o renderowanie glebokosci do tekstury - - - + //ustawianie przestrzeni rysowania + glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT); + //bindowanie FBO + glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); + //czyszczenie mapy głębokości + glClear(GL_DEPTH_BUFFER_BIT); + //ustawianie programu + glUseProgram(programDepth); glBindFramebuffer(GL_FRAMEBUFFER, 0); @@ -257,6 +311,12 @@ void renderScene(GLFWwindow* window) glUseProgram(program); + glm::mat4 lightVP = glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 40.0f) * glm::lookAt(sunPos, sunPos - sunDir, glm::vec3(0, 1, 0)); + drawObjectDepth(models::roomContext, lightVP, glm::mat4()); + + drawObjectDepth(models::windowContext, lightVP, glm::mat4()); + + drawObjectPBR(sphereContext, glm::translate(pointlightPos) * glm::scale(glm::vec3(0.1)) * glm::eulerAngleY(time / 3) * glm::translate(glm::vec3(4.f, 0, 0)) * glm::scale(glm::vec3(0.3f)), glm::vec3(0.2, 0.7, 0.3), 0.3, 0.0); drawObjectPBR(sphereContext, @@ -264,17 +324,52 @@ void renderScene(GLFWwindow* window) glm::vec3(0.5, 0.5, 0.5), 0.7, 0.0); drawObjectPBR(models::bedContext, glm::mat4(), glm::vec3(0.03f, 0.03f, 0.03f), 0.2f, 0.0f); + // + + drawObjectDepth(models::bedContext, lightVP, glm::mat4()); + drawObjectPBR(models::chairContext, glm::mat4(), glm::vec3(0.195239f, 0.37728f, 0.8f), 0.4f, 0.0f); + // + drawObjectDepth(models::chairContext, lightVP, glm::mat4()); + drawObjectPBR(models::deskContext, glm::mat4(), glm::vec3(0.428691f, 0.08022f, 0.036889f), 0.2f, 0.0f); + // + drawObjectDepth(models::deskContext, lightVP, glm::mat4()); + + drawObjectPBR(models::doorContext, glm::mat4(), glm::vec3(0.402978f, 0.120509f, 0.057729f), 0.2f, 0.0f); + // + drawObjectDepth(models::doorContext, lightVP, glm::mat4()); + + drawObjectPBR(models::drawerContext, glm::mat4(), glm::vec3(0.428691f, 0.08022f, 0.036889f), 0.2f, 0.0f); + // + drawObjectDepth(models::drawerContext, lightVP, glm::mat4()); + + drawObjectPBR(models::marbleBustContext, glm::mat4(), glm::vec3(1.f, 1.f, 1.f), 0.5f, 1.0f); + // + drawObjectDepth(models::marbleBustContext, lightVP, glm::mat4()); + drawObjectPBR(models::materaceContext, glm::mat4(), glm::vec3(0.9f, 0.9f, 0.9f), 0.8f, 0.0f); + // + drawObjectDepth(models::materaceContext, lightVP, glm::mat4()); + drawObjectPBR(models::pencilsContext, glm::mat4(), glm::vec3(0.10039f, 0.018356f, 0.001935f), 0.1f, 0.0f); + // + drawObjectDepth(models::pencilsContext, lightVP, glm::mat4()); + drawObjectPBR(models::planeContext, glm::mat4(), glm::vec3(0.402978f, 0.120509f, 0.057729f), 0.2f, 0.0f); + // + drawObjectDepth(models::planeContext, lightVP, glm::mat4()); + drawObjectPBR(models::roomContext, glm::mat4(), glm::vec3(0.9f, 0.9f, 0.9f), 0.8f, 0.0f); + // + //drawObjectDepth(models::roomContext, lightVP, glm::mat4()); drawObjectPBR(models::windowContext, glm::mat4(), glm::vec3(0.402978f, 0.120509f, 0.057729f), 0.2f, 0.0f); + // + //drawObjectDepth(models::windowContext, lightVP, glm::mat4()); glm::vec3 spaceshipSide = glm::normalize(glm::cross(spaceShip.getSpaceShipDir(), glm::vec3(0.f, 1.f, 0.f))); glm::vec3 spaceshipUp = glm::normalize(glm::cross(spaceshipSide, spaceShip.getSpaceShipDir())); @@ -295,6 +390,8 @@ void renderScene(GLFWwindow* window) glm::vec3(0.3, 0.3, 0.5), 0.2, 1.0 ); + // + drawObjectDepth(shipContext, lightVP, glm::translate(spaceShip.getSpaceShipPos()) * specshipCameraRotrationMatrix * glm::eulerAngleY(glm::pi()) * glm::scale(glm::vec3(0.03f))); spotlightPos = spaceShip.getSpaceShipPos() + 0.2 * spaceShip.getSpaceShipDir(); spotlightConeDir = spaceShip.getSpaceShipDir(); @@ -302,8 +399,11 @@ void renderScene(GLFWwindow* window) //draw lasers for (int i = 0; i < lasers.size(); i++) { - drawLaser(lasers[i], lasersContexts[i], 0.1); - drawLaser(lasers[i], lasersContexts[i], -0.1); + if (lasers[i].isLaserFly()) { + drawLaser(lasers[i], lasersContexts[i], 0.1); + drawLaser(lasers[i], lasersContexts[i], -0.1); + } + /*if (i % 2 == 0) { drawLaser(lasers[i], lasersContexts[i], 0.1); @@ -320,11 +420,11 @@ void renderScene(GLFWwindow* window) //test depth buffer - //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - //glUseProgram(programTest); - //glActiveTexture(GL_TEXTURE0); - //glBindTexture(GL_TEXTURE_2D, depthMap); - //Core::DrawContext(models::testContext); + /*glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glUseProgram(programTest); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, depthMap); + Core::DrawContext(models::testContext);*/ glUseProgram(0); glfwSwapBuffers(window); @@ -419,6 +519,8 @@ void init(GLFWwindow* window) programTest = shaderLoader.CreateProgram("shaders/test.vert", "shaders/test.frag"); programSun = shaderLoader.CreateProgram("shaders/shader_8_sun.vert", "shaders/shader_8_sun.frag"); + programDepth = shaderLoader.CreateProgram("shaders/shader_shadowap_sun.vert", "shaders/shader_shadowap_sun.frag"); + //programLaser = shaderLoader.CreateProgram("shaders/shader_laser.vert", "shaders/shader_laser.frag"); loadModelToContext("./models/sphere.obj", sphereContext); @@ -453,6 +555,9 @@ void init(GLFWwindow* window) } + initDepthMap(); + + /*for (int i = 0; i < spaceShip.getMaxNumberOfLasers(); i++) { loadModelToContext("./models/newlaser2.obj", spaceShip.getGun()[i].getLaserContext());