IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XNA/Monogame Discussion :

algo d'effet d'ouverture


Sujet :

XNA/Monogame

  1. #1
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut algo d'effet d'ouverture
    bonjour je cherche l'algorithme pour reproduire le même effet que dans la
    quand il clique sur "open animatedscalewindow". si quelqu'un à une idée...

    ps: si en même temps vous connaissez où trouver des algos pour faire des effets sympa...

    merci d'avance

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    Salut, a mon avis il faut draw dans une render target la popup ensuite appliquer un scale a cette render target.

    Ensuite tu appliques une distorsion a la texture.
    Tu peux regarder ceci pour la distorsion

    http://gamedev.stackexchange.com/que...-ripple-effect

    Bon courage.

  3. #3
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    bonjour, merci pour ton aide... hélas.... ce n'est pas bon...

  4. #4
    screetch
    Invité(e)
    Par défaut
    de 1 ce n'est pas la peine de spammer tous les forums DirectX et OpenGL avec la même question
    de 2, c'est quoi qui est pas bon? c'est exactement la technique qui est employée dans la vidéo et qui t'a été decrite:

    le programme rend la fenêtre popup dans une rendertarget séparée puis l'utilise comme une texture; il dessine ensuite un rectangle avec cette texture, le rectangle est agrandi a chaque frame jusqu'a même dépasser la taille normale puis revient en place.

    la taille du rectangle (l'effet de zoom) suit une fonction dont la valeur est défine grace a un "ressort" (un http://fr.wikipedia.org/wiki/Syst%C3...e_libert%C3%A9)

  5. #5
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par screetch Voir le message
    de 1 ce n'est pas la peine de spammer tous les forums DirectX et OpenGL avec la même question
    de 2, c'est quoi qui est pas bon? c'est exactement la technique qui est employée dans la vidéo et qui t'a été decrite:

    le programme rend la fenêtre popup dans une rendertarget séparée puis l'utilise comme une texture; il dessine ensuite un rectangle avec cette texture, le rectangle est agrandi a chaque frame jusqu'a même dépasser la taille normale puis revient en place.

    la taille du rectangle (l'effet de zoom) suit une fonction dont la valeur est défine grace a un "ressort" (un http://fr.wikipedia.org/wiki/Syst%C3...e_libert%C3%A9)
    1) je ne l'aurais pas fait je n'aurais pas eu ta réponse... je me trompe? et si je l'ai fait c'est parce que ça n'a pas fonctionné, déjà parce que le shader est statique (indépendant du temps...). alors que l'idée du ressort, est déjà plus intéressante...

    2) merci de ta réponse!

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    1) je ne l'aurais pas fait je n'aurais pas eu ta réponse... je me trompe? et si je l'ai fait c'est parce que ça n'a pas fonctionné, déjà parce que le shader est statique (indépendant du temps...). alors que l'idée du ressort, est déjà plus intéressante...
    Shader statiaque? je ne comprend pas trop tu ne peux pas lui passer une variable DT (delta time) en parametre?

  7. #7
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par saturn1 Voir le message
    Shader statiaque? je ne comprend pas trop tu ne peux pas lui passer une variable DT (delta time) en parametre?
    bein pour l'implémenter où après dans le code... ?

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    Ben a chaque update tu passes le nouveau DT a ton shader.

  9. #9
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par saturn1 Voir le message
    Ben a chaque update tu passes le nouveau DT a ton shader.
    oui jusque là on est tous ok je pense..., c'est surtout quoi faire du time dans la fonction Distort() du shader qui est le plus problématique... bref, toute façon je vais bientôt réessayer de coder ça... vu que la je viens de finir d’implémenter l'effet ressort (pas avec la vraie formule, mais c'est tout comme). je poste le code ici pour ceux que ça intéresse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // p_time est un float initialisé à 0.0f
    // les 2 paramètres variables sont le 0.5f et le 5.0f
     
    public override void Update(GameTime gameTime)
    {
          p_time += (float)gameTime.ElapsedGameTime.TotalSeconds;
          float coeff = 1.0f - Math.Min(1.0f,p_time/0.5f); // chûte de la hauteur de la sinusoïde
          float scale = (coeff) * (float)Math.Cos(5.0f * p_time);
          scale = 1.0f - scale; // cette ligne permet entre autre de mettre la valeur négative en positif (1>= scale >= 0)
     
          p_scale = new Vector3(scale);
          ...
    }

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut
    Re oui cela ne doit pas etre evident.

    Je te passe le code de mon shader de multi wave si cela peut t'aider:

    PreWave.fx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    sampler ColorMapSampler : register(s0);
     
     
    float2 center;
    float time;
    float3 shockParams = float3(10, 0.8, 0.1);
     
     
     
    float4 PixelShaderFunction(float2 texCoord: TEXCOORD0) : COLOR
    {
    	float2 tmpTexCoord = texCoord.xy;
        float len = length(center - tmpTexCoord);
    	if ((len <= (time + shockParams.z)) &&
           (len >= (time - shockParams.z)))
    	{
    		float diff = (len - time);
    		float powDiff = 1.0 - pow(abs(diff*shockParams.x),
                                    shockParams.y);
    		float diffTime = diff  * powDiff;
    		float2 diffUV = normalize(tmpTexCoord - center);
    		tmpTexCoord = (diffUV * diffTime);
     
    		return float4(tmpTexCoord.x, tmpTexCoord.y, 0, 0);
    	}
    	return float4(0, 0, 0, 0);
    }
     
    technique
    {
       pass p1
        {
            PixelShader = compile ps_2_0 PixelShaderFunction();
        }
     
    }

    Wave.fx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    sampler ColorMapSampler : register(s0);
     
    texture Distorsion;
    sampler2D DistorsionSampler = sampler_state { texture = <Distorsion>; magfilter = POINT; minfilter = POINT; mipfilter=POINT; }; 
     
    float2 center;
    float time;
    float3 shockParams = float3(10, 0.8, 0.1);
     
     
     
    float4 PixelShaderFunction(float2 texCoord: TEXCOORD0) : COLOR
    {
    	float2 tmpTexCoord = texCoord.xy;
    	float2 waveOffset = tex2D(DistorsionSampler, tmpTexCoord);
        float4 color = tex2D(ColorMapSampler,  tmpTexCoord + waveOffset);
        return color;
    }
     
    technique
    {
       pass p1
        {
            PixelShader = compile ps_2_0 PixelShaderFunction();
        }
     
    }

    Bon chance, poste ton code si tu trouves cela peut aider d'autres...

  11. #11
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Merci je n'y manquerais pas... si bien sûre ça donne l'effet attendu... À propos la variable Time dans wave.fx n'est pas utilisée ...

  12. #12
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    re, je n'ai toujours pas intégré l'effet shader, mais je voulais reposter le code pour créer un effet ressort, car on m'a communiqué une formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // float scale servira à la matrice scale
    float h = (float)Math.Exp(-Amortissement * time);
    float scale = 1.0f * h * (float)Math.Sin(Omega * time);
    scale = 1.0f - scale;
     
    /*
    time = temps
    lambda = amortissement (0 = pas d'amortissement)
    omega = pulsation
    */

Discussions similaires

  1. Effet d'ouverture d'un clip
    Par Skangell dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 17/11/2010, 14h30
  2. Réponses: 1
    Dernier message: 14/11/2008, 14h57
  3. Comment créer un effet d'ouverture d'une porte
    Par diden138 dans le forum Flash
    Réponses: 1
    Dernier message: 29/11/2006, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo