optimisation of size #1
1 changed files with 164 additions and 0 deletions
164
impl-shadow-map.diff
Normal file
164
impl-shadow-map.diff
Normal file
|
@ -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 <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
|
Reference in a new issue