This repository has been archived on 2023-05-27. You can view files and clone it, but cannot push or open issues or pull requests.
api8/impl-shadow-map.diff

165 lines
5.9 KiB
Diff
Raw Normal View History

2023-05-26 14:16:58 +02:00
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 <GL4D/gl4df.h>
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("<vs>shaders/shadowMap.vs", "<fs>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