164 lines
5.9 KiB
Diff
164 lines
5.9 KiB
Diff
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
|