From 3931e386348b1d6311753d9bb1cccfc6baf52472 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Fri, 26 May 2023 14:16:58 +0200 Subject: [PATCH] gl4d diff --- impl-shadow-map.diff | 164 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 impl-shadow-map.diff diff --git a/impl-shadow-map.diff b/impl-shadow-map.diff new file mode 100644 index 0000000..0d2b123 --- /dev/null +++ b/impl-shadow-map.diff @@ -0,0 +1,164 @@ +Seulement dans advanced_modelisation-1.2/: compile_flags.txt +Les sous-répertoires advanced_modelisation-1.1/documentation et advanced_modelisation-1.2/documentation sont identiques +Les sous-répertoires advanced_modelisation-1.1/images et advanced_modelisation-1.2/images sont identiques +diff advanced_modelisation-1.1/main.c advanced_modelisation-1.2/main.c +2a3 +> #include +6a8,9 +> #define SHADOW_MAP_SIDE 1024 +> +17c20 +< static GLuint _pId[2] = { 0 }; +--- +> static GLuint _pId[3] = { 0 }; +19a23,27 +> /*!\brief Framebuffer Object */ +> static GLuint _fbo = 0; +> /*!\brief Texture recevant la shadow map */ +> static GLuint _smTex = 0; +> +39a48,49 +> /* ATTENTION à bien activer le cull-face mais à l'inverser pour la +> shadow map afin d'avoir l'ombre des faces internes */ +45a56 +> _pId[2] = gl4duCreateProgram("shaders/shadowMap.vs", "shaders/shadowMap.fs", NULL); +47a59,64 +> gl4duGenMatrix(GL_FLOAT, "lightViewMatrix"); +> gl4duGenMatrix(GL_FLOAT, "lightProjectionMatrix"); +> +> gl4duBindMatrix("lightProjectionMatrix"); +> gl4duLoadIdentityf(); +> gl4duOrthof(-13, 13, -6, 6, 1, 40); +53,55d69 +< /* glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); */ +< /* glLineWidth(7.0f); */ +< /* glEnable(GL_LINE_SMOOTH); */ +101a116,122 +> /* Création et paramétrage de la Texture de shadow map */ +> glGenTextures(1, &_smTex); +> glBindTexture(GL_TEXTURE_2D, _smTex); +> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); +> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); +> glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, SHADOW_MAP_SIDE, SHADOW_MAP_SIDE, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); +> +102a124,127 +> +> /* Création du Framebuffer Object */ +> glGenFramebuffers(1, &_fbo); +> +115,116c140,181 +< GLfloat lumpos[] = {-4.0f, 4.0f, 0.0f, 1.0f}; +< lumpos[1] = 2.0f + 1.9f * sin(a); +--- +> GLfloat lumpos[] = {9.0f, 4.0f, 0.0f, 1.0f}; +> lumpos[1] = 4.0f + 1.9f * sin(a); +> gl4duBindMatrix("lightViewMatrix"); +> gl4duLoadIdentityf(); +> gl4duLookAtf(lumpos[0], lumpos[1], lumpos[2], 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); +> /* Attention le CULL FACE est sur les faces arrières */ +> /* ATTENTION : donc ici il nous faut rendre la depth des faces +> internes, pour cela on cull les faces FRONT */ +> glCullFace(GL_FRONT); +> +> +> glBindFramebuffer(GL_FRAMEBUFFER, _fbo); +> glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, _smTex, 0); +> /* ATTENTION : petit détail pouvant produire un résultat incomplet, +> le viewport doit ici être adapté aux dimensions de la texture +> dans laquelle la depth est stockée (peut être automatisée) */ +> glViewport(0, 0, SHADOW_MAP_SIDE, SHADOW_MAP_SIDE); +> glClear(GL_DEPTH_BUFFER_BIT); +> glUseProgram(_pId[2]); +> /* cone */ +> gl4duBindMatrix("model"); +> gl4duLoadIdentityf(); +> gl4duTranslatef(0.0f, 1.5f, 0.0f); +> gl4duRotatef(180.0f * a / M_PI, 0.0f, 1.0f, 0.0f); +> gl4duSendMatrices(); +> gl4dgDraw(_coneId); +> /* quad */ +> gl4duLoadIdentityf(); +> gl4duRotatef(-90.0f, 1.0f, 0.0f, 0.0f); +> gl4duScalef(13.0f, 13.0f, 13.0f); +> gl4duSendMatrices(); +> gl4dgDraw(_quadId); +> +> glBindFramebuffer(GL_FRAMEBUFFER, 0); +> /* ATTENTION : maintenant qu'on est revenu à l'écran pour le rendu +> final, remettre le cull-face sur les faces arrières */ +> glCullFace(GL_BACK); +> glDrawBuffer(GL_COLOR_ATTACHMENT0); +> +> /* ATTENTION : maintenant qu'on est revenu à l'écran, le viewport +> doit être adapté aux dimensions de la fenêtre */ +> glViewport(0, 0, _wW, _wH); +125,126d189 +< /* Attention le CULL FACE est sur les faces arrières */ +< glCullFace(GL_BACK); +133a197,198 +> glActiveTexture(GL_TEXTURE0 + 1); +> glBindTexture(GL_TEXTURE_2D, _smTex); +135a201,204 +> glUniform1i(glGetUniformLocation(_pId[0], "tex"), 0); +> glUniform1i(glGetUniformLocation(_pId[0], "tex_inv"), 1); +> glUniform1f(glGetUniformLocation(_pId[0], "tex_zoom"), 2.0f); +> glUniform1i(glGetUniformLocation(_pId[0], "sm"), 1); +143c212 +< gl4duScalef(15.0f, 15.0f, 15.0f); +--- +> gl4duScalef(13.0f, 13.0f, 13.0f); +147c216,221 +< glActiveTexture(GL_TEXTURE0 + 1); +--- +> /* ATTENTION : PB de rapidité qu'on a eu (c'est une découverte pour +> moi), il semble que pour le même shader, avoir placé le sampler2D +> sm en étage de texture 1 puis en 2, a ralenti drastiquement le +> shader !!! J'ai cherché loooooongtemps avant de trouver l'origine +> de ce problème. */ +> glActiveTexture(GL_TEXTURE0 + 2); +151,153c225 +< glUniform1i(glGetUniformLocation(_pId[0], "tex"), 0); +< glUniform1i(glGetUniformLocation(_pId[0], "nm"), 1); +< glUniform1i(glGetUniformLocation(_pId[0], "use_tex"), 1); +--- +> glUniform1i(glGetUniformLocation(_pId[0], "nm"), 2); +155c227 +< +--- +> glUniform1f(glGetUniformLocation(_pId[0], "tex_zoom"), 10.0f); +156a229 +> +160c233,235 +< /* Attention le CULL FACE est sur les faces avant */ +--- +> /* ATTENTION : enfin, le CULL FACE est sur les faces avant ici car +> on est dans la sphère englobante (rien à voir avec la +> shadowmap) */ +165c240 +< gl4duScalef(14.0f, 14.0f, 14.0f); +--- +> gl4duScalef(25.0f, 25.0f, 25.0f); +167c242,243 +< glUniform1f(glGetUniformLocation(_pId[1], "zoom"), 0.9f); +--- +> glUniform1i(glGetUniformLocation(_pId[1], "tex_inv"), 0); +> glUniform1f(glGetUniformLocation(_pId[1], "tex_zoom"), 1.6f); +172d247 +< +174d248 +< +179a254,258 +> if(_fbo) { +> glDeleteTextures(1, &_smTex); +> glDeleteFramebuffers(1, &_fbo); +> _fbo = 0; +> } +Seulement dans advanced_modelisation-1.2/: main.o +diff advanced_modelisation-1.1/Makefile advanced_modelisation-1.2/Makefile +21c21 +< VERSION = 1.1 +--- +> VERSION = 1.2 +Les fichiers binaires advanced_modelisation-1.1/modelisation et advanced_modelisation-1.2/modelisation sont différents +Seulement dans advanced_modelisation-1.2/: noise.o +Les sous-répertoires advanced_modelisation-1.1/shaders et advanced_modelisation-1.2/shaders sont identiques