bool FX_Blur(Cinematic * c, CinematicBitmap * tb, Camera & camera) { if(c->numbitmap < 0 || !tb) return false; if(TotOldPos == NBOLDPOS) { TotOldPos--; std::copy(OldPos + 1, OldPos + 1 + TotOldPos, OldPos); memmove(OldAz, OldAz + 1, TotOldPos * 4); } if((GetTimeKeyFramer() - LastTime) < 0.40f) { LastTime = GetTimeKeyFramer(); OldPos[TotOldPos] = c->m_pos; OldAz[TotOldPos] = c->angz; TotOldPos++; } float alpha = 32.f; float dalpha = (127.f / NBOLDPOS); Vec3f * pos = OldPos; float * az = OldAz; int nb = TotOldPos; while(nb) { camera.m_pos = *pos; camera.angle.setPitch(0); camera.angle.setYaw(0); camera.angle.setRoll(*az); PrepareCamera(&camera, g_size); Color col = Color(255, 255, 255, int(alpha)); DrawGrille(tb, col, 0, NULL, c->posgrille, c->angzgrille, c->fadegrille); alpha += dalpha; pos++; az++; nb--; } return true; }
/*---------------------------------------------------------------*/ void Cinematic::Render(float FDIFF) { CinematicBitmap * tb; LargeurRender = DANAESIZX; HauteurRender = DANAESIZY; if (projectload) { GRenderer->Clear(Renderer::ColorBuffer); GRenderer->BeginScene(); GereTrack(this, FDIFF); //sound if (changekey) { if (idsound >= 0) { PlaySoundKeyFramer(idsound); } } //draw GRenderer->SetBlendFunc(Renderer::BlendSrcAlpha, Renderer::BlendInvSrcAlpha); GRenderer->GetTextureStage(0)->SetColorOp(TextureStage::OpModulate, TextureStage::ArgTexture, TextureStage::ArgDiffuse); GRenderer->GetTextureStage(0)->SetAlphaOp(TextureStage::OpModulate, TextureStage::ArgTexture, TextureStage::ArgDiffuse); GRenderer->GetTextureStage(1)->DisableAlpha(); //image key tb = m_bitmaps[numbitmap]; //fx int col = 0x00FFFFFF; switch (fx & 0x000000FF) { case FX_FADEIN: col = FX_FadeIN(a, color, colord); break; case FX_FADEOUT: col = FX_FadeOUT(a, color, colord); break; case FX_BLUR: FX_Blur(this, tb); break; default: break; } //fx precalculation switch (fx & 0x0000ff00) { case FX_DREAM: if ((this->fxsuiv & 0x0000ff00) == FX_DREAM) FX_DreamPrecalc(tb, 15.f, (FPS > 1.f) ? GetTrackFPS() / FPS : 0.f); else FX_DreamPrecalc(tb, 15.f * a, (FPS > 1.f) ? GetTrackFPS() / FPS : 0.f); break; default: break; } Camera.pos = pos; SetTargetCamera(&Camera, Camera.pos.x, Camera.pos.y, 0.f); Camera.angle.b = 0; Camera.angle.g = angz; Camera.centerx = LargeurRender >> 1; Camera.centery = HauteurRender >> 1; Camera.clip.right = LargeurRender; Camera.clip.bottom = HauteurRender; PrepareCamera(&Camera); SetActiveCamera(&Camera); int alpha = ((int)(a * 255.f)) << 24; int stopline = tb->nbx; if (stopline & 1) stopline++; if (force ^ 1) alpha = 0xFF000000; col |= alpha; CinematicLight lightt, *l = NULL; if ((this->light.intensity >= 0.f) && (this->lightd.intensity >= 0.f)) { lightt = this->light; lightt.pos.x += (float)(LargeurRender >> 1); lightt.pos.y += (float)(HauteurRender >> 1); #define SPEEDINTENSITYRND (10.f) float flIntensityRNDToReach = lightt.intensiternd * rnd(); m_flIntensityRND += (flIntensityRNDToReach - m_flIntensityRND) * FDIFF * SPEEDINTENSITYRND; m_flIntensityRND = m_flIntensityRND < 0.f ? 0.f : m_flIntensityRND > 1.f ? 1.f : m_flIntensityRND; LightRND = lightt.intensity + (lightt.intensiternd * rnd()); if (LightRND > 1.f) LightRND = 1.f; l = &lightt; } if (tb->grid.nbvertexs) DrawGrille(&tb->grid, col, fx, l, &posgrille, angzgrille); //PASS #2 if (force & 1) { switch (ti) { case INTERP_NO: Camera.pos = possuiv; SetTargetCamera(&Camera, Camera.pos.x, Camera.pos.y, 0.f); Camera.angle.b = 0; Camera.angle.g = angzsuiv; PrepareCamera(&Camera); break; case INTERP_LINEAR: break; case INTERP_BEZIER: break; } tb = m_bitmaps[numbitmapsuiv]; alpha = 0xFF000000 - alpha; col &= 0x00FFFFFF; col |= alpha; l = NULL; if ((this->light.intensity >= 0.f) && (this->lightd.intensity >= 0.f)) { lightt = this->lightd; lightt.pos.x += (float)(LargeurRender >> 1); lightt.pos.y += (float)(HauteurRender >> 1); LightRND = lightt.intensity + (lightt.intensiternd * rnd()); if (LightRND > 1.f) LightRND = 1.f; l = &lightt; } if (tb->grid.nbvertexs) DrawGrille(&tb->grid, col, fx, l, &posgrillesuiv, angzgrillesuiv); }
void DrawScene() { glPushMatrix(); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); //effet brouillard if(brouillard) { GLint fogmode; //Initialisation de fogmode GLfloat fogcolor[4] = {0.5, 0.5, 0.5, 1} ; //Initialisation de la couleur (RGBA) glEnable(GL_FOG); //Cela permet d'activer le mode GL_FOG fogmode = GL_EXP ; glFogi(GL_FOG_MODE, fogmode); //On range le mode fogmode dans la variable GL_FOG_MODE glFogfv(GL_FOG_COLOR, fogcolor); //On fait la meme chose pour la couleur et la variable GL_FOG_COLOR glFogf(GL_FOG_DENSITY, 0.05); //cela permet de definir la densite du brouillard (plus ou moins epais) glFogf(GL_FOG_START, 1.0); //Debut du brouillard glFogf(GL_FOG_END, 5.0); //Fin du brouillar } else //desactiver effet brouillard glDisable(GL_FOG); /**********************************/ //effect du reflet if(reflet) { glDisable(GL_DEPTH_TEST); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glEnable(GL_STENCIL_TEST); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); glStencilFunc(GL_ALWAYS, 1, 0xffffffff); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); DrawGrille(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glEnable(GL_DEPTH_TEST); glStencilFunc(GL_EQUAL, 1, 0xffffffff); /* draw if ==1 */ glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glPushMatrix(); glScalef(1.0, -1.0, 1.0); //glEnable(GL_LIGHTING); glEnable(GL_TEXTURE_2D); glmDraw22( pmodel, GLM_SMOOTH | GLM_2_SIDED | GLM_MATERIAL | GLM_TEXTURE); glPopMatrix(); glDisable(GL_STENCIL_TEST); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); DrawPlateau(); } else DrawPlateau(); glEnable(GL_LIGHTING); glEnable(GL_TEXTURE_2D); glmDraw2( pmodel, GLM_SMOOTH | GLM_2_SIDED | GLM_MATERIAL | GLM_TEXTURE); /**********************************/ //effect d ombre if(ombre) { glPushMatrix(); static GLfloat floorPlane[4]; static GLfloat floorShadow[4][4]; GLfloat light_pos[] = { .3, .5, .2, 0.0 }; findPlane(floorPlane, vfloor[1], vfloor[2], vfloor[3]); shadowMatrix(floorShadow, floorPlane, light_pos); glMultMatrixf((GLfloat *) floorShadow); glmDraw22( pmodel, GLM_NONE); glPopMatrix(); } glPopMatrix(); }
void DrawPlateau() { glColor3f(1.0,1.0,1.0); glClearColor (1.0,1.0,1.0,1.0); glEnable(GL_TEXTURE_2D); chargerTextures(0,"texture/sombre.tga"); chargerTextures(1,"texture/wood_wide1.tga"); glBindTexture(GL_TEXTURE_2D, aTexture[0].texID); //les bords superieur glBegin(GL_QUADS); glTexCoord2i(1,1); glVertex3f(-1.0,0.0,-1.0); //a ----> 1point de la grille glTexCoord2i(0,1); glVertex3f(-1.058,0.0,-1.058); //A glTexCoord2i(0,0); glVertex3f(-1.058,0.0,1.058); //B glTexCoord2i(1,0); glVertex3f(-1.0,0.0,1.0);//b ----> 2point de la grille glTexCoord2i(1,1); glVertex3f(-1.0,0.0,1.0);//b glTexCoord2i(0,1); glVertex3f(-1.058,0.0,1.058);//B glTexCoord2i(0,0); glVertex3f(1.058,0.0,1.058);//C glTexCoord2i(1,0); glVertex3f(1.0,0.0,1.0);//c ----> 3point de la grille glTexCoord2i(1,1); glVertex3f(1.0,0.0,1.0);//c glTexCoord2i(0,1); glVertex3f(1.058,0.0,1.058);//C glTexCoord2i(0,0); glVertex3f(1.058,0.0,-1.058);//D glTexCoord2i(1,0); glVertex3f(1.0,0.0,-1.0);//d glTexCoord2i(1,1); glVertex3f(1.0,0.0,-1.0);//d ----> 4point de la grille glTexCoord2i(0,1); glVertex3f(1.058,0.0,-1.058);//D glTexCoord2i(0,0); glVertex3f(-1.058,0.0,-1.058);//A glTexCoord2i(1,0); glVertex3f(-1.0,0.0,-1.0); //a glEnd(); //les bords lateral glBegin(GL_QUADS); glTexCoord2i(1,1); glVertex3f(-1.058,0.0,-1.058);//A glTexCoord2i(0,1); glVertex3f(-1.058,-0.02,-1.058); //A2 glTexCoord2i(0,0); glVertex3f(-1.058,-0.02,1.058); //B2 glTexCoord2i(1,0); glVertex3f(-1.058,0.0,1.058);//B glTexCoord2i(1,1); glVertex3f(-1.058,0.0,1.058);//B glTexCoord2i(0,1); glVertex3f(-1.058,-0.02,1.058);//B2 glTexCoord2i(0,0); glVertex3f(1.058,-0.02,1.058);//C2 glTexCoord2i(1,0); glVertex3f(1.058,0.0,1.058);//C glTexCoord2i(1,1); glVertex3f(1.058,0.0,1.058);//C glTexCoord2i(0,1); glVertex3f(1.058,-0.02,1.058);//C2 glTexCoord2i(0,0); glVertex3f(1.058,-0.02,-1.058);//D2 glTexCoord2i(1,0); glVertex3f(1.058,0.0,-1.058);//D glTexCoord2i(1,1); glVertex3f(1.058,0.0,-1.058);//D glTexCoord2i(0,1); glVertex3f(1.058,-0.02,-1.058);//D2 glTexCoord2i(0,0); glVertex3f(-1.058,-0.02,-1.058); //A2 glTexCoord2i(1,0); glVertex3f(-1.058,0.0,-1.058); //A glEnd(); if(reflet) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(1.0,1.0,1.0,0.5); glClearColor (1.0,1.0,1.0,0.5); } //la face posterieur glBegin(GL_QUADS); glTexCoord2i(1,1); glVertex3f(-1.058,-0.02,-1.058); glTexCoord2i(0,1); glVertex3f(-1.058,-0.02,1.058); glTexCoord2i(0,0); glVertex3f(1.058,-0.02,1.058); glTexCoord2i(1,0); glVertex3f(1.058,-0.02,-1.058); glEnd(); DrawGrille(); if(reflet) { glDisable(GL_BLEND); glColor3f(1.0,1.0,1.0); glClearColor (1.0,1.0,1.0,1.0); } DrawSky(); glDeleteTextures(1, &aTexture[0].texID); glDeleteTextures(1, &aTexture[1].texID); glDisable(GL_TEXTURE_2D); //le plan de pojection de l'ombre vfloor[0][0]=-1.058; vfloor[0][1]=0.0001; vfloor[0][2]=-1.058; vfloor[1][0]=-1.058; vfloor[1][1]=0.0001; vfloor[1][2]=1.058; vfloor[2][0]=1.058; vfloor[2][1]=0.0001; vfloor[2][2]=1.058; vfloor[3][0]=1.058; vfloor[3][1]=0.0001; vfloor[3][2]=-1.058; }
/*---------------------------------------------------------------*/ void Cinematic::Render(float FDIFF) { CinematicBitmap * tb; LargeurRender = g_size.width(); HauteurRender = g_size.height(); if(projectload) { GRenderer->Clear(Renderer::ColorBuffer); GereTrack(this, FDIFF); //sound if(changekey && idsound >= 0) PlaySoundKeyFramer(idsound); //draw GRenderer->SetBlendFunc(Renderer::BlendSrcAlpha, Renderer::BlendInvSrcAlpha); GRenderer->GetTextureStage(0)->setColorOp(TextureStage::OpModulate, TextureStage::ArgTexture, TextureStage::ArgDiffuse); GRenderer->GetTextureStage(0)->setAlphaOp(TextureStage::OpModulate, TextureStage::ArgTexture, TextureStage::ArgDiffuse); GRenderer->GetTextureStage(1)->disableAlpha(); //image key tb = m_bitmaps[numbitmap]; //fx int col = 0x00FFFFFF; switch(fx & 0x000000FF) { case FX_FADEIN: col = FX_FadeIN(a, color, colord); break; case FX_FADEOUT: col = FX_FadeOUT(a, color, colord); break; case FX_BLUR: FX_Blur(this, tb, m_camera); break; default: break; } //fx precalculation switch(fx & 0x0000ff00) { case FX_DREAM: if ((this->fxsuiv & 0x0000ff00) == FX_DREAM) FX_DreamPrecalc(tb, 15.f, (FPS > 1.f) ? GetTrackFPS() / FPS : 0.f); else FX_DreamPrecalc(tb, 15.f * a, (FPS > 1.f) ? GetTrackFPS() / FPS : 0.f); break; default: break; } m_camera.orgTrans.pos = pos; m_camera.setTargetCamera(m_camera.orgTrans.pos.x, m_camera.orgTrans.pos.y, 0.f); m_camera.angle.setPitch(0); m_camera.angle.setRoll(angz); m_camera.clip = Rect(LargeurRender, HauteurRender); m_camera.center = m_camera.clip.center(); PrepareCamera(&m_camera, g_size); SetActiveCamera(&m_camera); int alpha = ((int)(a * 255.f)) << 24; if(force ^ 1) alpha = 0xFF000000; col |= alpha; CinematicLight lightt, *l = NULL; if(this->light.intensity >= 0.f && this->lightd.intensity >= 0.f) { lightt = this->light; lightt.pos.x += (float)(LargeurRender >> 1); lightt.pos.y += (float)(HauteurRender >> 1); static const float SPEEDINTENSITYRND = 10.f; float flIntensityRNDToReach = lightt.intensiternd * rnd(); m_flIntensityRND += (flIntensityRNDToReach - m_flIntensityRND) * FDIFF * SPEEDINTENSITYRND; m_flIntensityRND = m_flIntensityRND < 0.f ? 0.f : m_flIntensityRND > 1.f ? 1.f : m_flIntensityRND; LightRND = lightt.intensity + (lightt.intensiternd * rnd()); if(LightRND > 1.f) LightRND = 1.f; l = &lightt; } if(tb->grid.nbvertexs) DrawGrille(&tb->grid, col, fx, l, &posgrille, angzgrille); //PASS #2 if(force & 1) { switch(ti) { case INTERP_NO: m_camera.orgTrans.pos = possuiv; m_camera.setTargetCamera(m_camera.orgTrans.pos.x, m_camera.orgTrans.pos.y, 0.f); m_camera.angle.setPitch(0); m_camera.angle.setRoll(angzsuiv); PrepareCamera(&m_camera, g_size); break; case INTERP_LINEAR: break; case INTERP_BEZIER: break; } tb = m_bitmaps[numbitmapsuiv]; alpha = 0xFF000000 - alpha; col &= 0x00FFFFFF; col |= alpha; l = NULL; if(this->light.intensity >= 0.f && this->lightd.intensity >= 0.f) { lightt = this->lightd; lightt.pos.x += (float)(LargeurRender >> 1); lightt.pos.y += (float)(HauteurRender >> 1); LightRND = lightt.intensity + (lightt.intensiternd * rnd()); if(LightRND > 1.f) LightRND = 1.f; l = &lightt; } if(tb->grid.nbvertexs) DrawGrille(&tb->grid, col, fx, l, &posgrillesuiv, angzgrillesuiv); }