Subscription date : 25 June 2008
Messages : 49
|
Avant de partir une dizaine de jours je vais essayer de vous pondre une petite serie d'effets en OpenGL pour les icones du dock
Je vais commencer doucement (a mon avis tu as du deja trouver ces effets Fabounet) et je terminerai par des effets a faire chauffer la CG par contre a toi d'integrer ca dans ton code ...
On va commencer donc par de vulgaires rotations de l'icone soit sur X, Y ou Z, un petit rebond de l'icone, un dezoome avec disparition et pour finir un petit spot qui eclaire l'icone (a revoir je l'ai fait dans la hate ca rend pas comme je veux ...)
float fRotX = 360.0f; // Pour la rotation sur X
float fRotY = 360.0f; // Y
float fRotZ = 360.0f; // Z
float fStepTurn = 0.01f; // la vitesse de rotation de l'icone
float fHauteurRebond = 0.3f; // amplitude du rebond de l'icone
float fDegresRebond = 180.0f; // Degres pour le calcul du rebond
float fStepRebond = 0.1f; // Vitesse du rebond
float fRebond = 0.0f; // Valeur finale du rebond
float fZoom = -10.0f; // Le zoom de l'icone par defaut
float fStepZoom = 0.1f; // La vitesse du zoom
Prototype
void DrawIcon(void);
void DrawSpot(void);
Voila pour les variables et proto
glDisable(GL_DEPTH_TEST); // Plus de test de profondeur please
glEnable(GL_TEXTURE_2D); // On active les textures
glBindTexture(GL_TEXTURE_2D, texture Icone); // On bind la texture de l'icone
glLoadIdentity(); // reset matrice d'identite
glTranslatef(0.0f, fRebond, fZoom); // On positionne l'icone
glRotatef(fRotX, 1.0f, 0.0f, 0.0f); // Rotation sur X
glRotatef(fRotY, 0.0f, 1.0f, 0.0f); // Rotation sur Y
glRotatef(fRotZ, 0.0f, 0.0f, 1.0f); // Rotation sur Z
glColor4f(1.0f, 1.0f, 1.0f, 1.0f + (fZoom / 100.0f)); // Couleur de l'icone
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Transparence avec le canal alpha
glEnable(GL_BLEND); // On active le blend
glEnable(GL_ALPHA_TEST); // On active le test alpha
glAlphaFunc(GL_GREATER, 0.0f); // On affiche que les pixels ayant un alpha > 0
DrawIcon(); // On affiche l'icone
glDisable(GL_TEXTURE_2D); // Fini texture
DrawSpot(); // Bein la c'est si on veut le spot en dessous
glDisable(GL_ALPHA_TEST); // Desactive l'alpha test
// Ici des que tu mets une des variables fRotX, fRotY ou fRotZ a 0 l'icone va tourner
fRotX += fStepTurn; // Pour une rotation d'1 tour sur X
if (fRotX >= 360.0f)
fRotX = 360.0f;
fRotY += fStepTurn; // Pareil pour Y
if (fRotY >= 360.0f)
fRotY = 360.0f;
fRotZ += fStepTurn; // Et pour Z
if (fRotZ >= 360.0f)
fRotZ = 360.0f;
// Pour le rebond de l'icone pareil fDegresRebond a 0 = un petit jump
fRebond = fHauteurRebond*sin(fDegresRebond*RADIAN);
fDegresRebond += fStepRebond;
if (fDegresRebond >= 180.0f)
fDegresRebond = 180.0f;
// Le zoom (la il bloque a -100 a virer si tu veux pas un icone minuscule)
fZoom -= fStepZoom;
if (fZoom < -100.0f)
fZoom = -100.0f;
}
void DrawIcon(void) // L'affichage de l'icone
{
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);
glEnd();
}
void DrawSpot(void) // L'affichage du spot (il est pas tres beau je pense qu'une texture rendrai beaucoup mieux)
{
glBegin(GL_QUADS);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glVertex3f(-0.2f, -1.0f, 0.0f);
glVertex3f( 0.2f, -1.0f, 0.0f);
glColor4f(0.0f, 0.0f, 1.0f, 0.1f);
glVertex3f( 1.0f, 0.0f, 0.0f);
glVertex3f(-1.0f, 0.0f, 0.0f);
glEnd();
}
voila pour le moment prochaine etape zoom multiple de l'icone, blur, glow, effet de torsion et un petit effet d'ondulation genre onde sur l'eau
@++
AuGuR |