Home Forums Wiki Doc Install Extras Screenshots Source Code Projects Blog Users Groups Register
Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Effets OpenGL
The latest stable release is the *3.4.0* : How to install it here.
Note: We just switched from BZR to Git on Github! (only to host the code and your future pull requests)
Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Effets OpenGL
AuGuR Français 0 AuGuR [Read]
26 June 2008 à 18:58

AuGuR, Thursday 26 June 2008 à 18:58


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

Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Effets OpenGL
AuGuR Français 0 AuGuR [Read]
26 June 2008 à 18:58


Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Effets OpenGL Top

Online users :

Powered by ElementSpeak © 2007 Adrien Pilleboue, 2009-2013 Matthieu Baerts.
Dock based on CSS Dock Menu (Ndesign) with jQuery. Icons by zgegball
Cairo-Dock is a free software under GNU-GPL3 licence. First stable version created by Fabounet.
Many thanks to TuxFamily for the web Hosting and Mav for the domain name.