Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
/*---------------------------------------------------------------*/
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);
		}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
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;

}
Ejemplo n.º 5
0
/*---------------------------------------------------------------*/
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);
		}