Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > Moteurs de jeux vidéo > XNA
XNA Forum d'entraide sur le développement avec XNA
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 12h01   #1
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
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
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 14h19   #2
saturn1
Membre confirmé
 
Inscription : janvier 2008
Messages : 586
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 586
Points : 285
Points : 285
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.
saturn1 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/01/2012, 09h06   #3
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
bonjour, merci pour ton aide... hélas.... ce n'est pas bon...
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 31/01/2012, 10h02   #4
screetch
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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)
  Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 10h22   #5
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
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!
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 18h13   #6
saturn1
Membre confirmé
 
Inscription : janvier 2008
Messages : 586
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 586
Points : 285
Points : 285
Citation:
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?
saturn1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 18h56   #7
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
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... ?
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 11h05   #8
saturn1
Membre confirmé
 
Inscription : janvier 2008
Messages : 586
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 586
Points : 285
Points : 285
Ben a chaque update tu passes le nouveau DT a ton shader.
saturn1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 11h39   #9
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
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 :
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);
      ...
}
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 17h55   #10
saturn1
Membre confirmé
 
Inscription : janvier 2008
Messages : 586
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 586
Points : 285
Points : 285
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 :
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 :
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...
saturn1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 20h12   #11
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
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 ...
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 22h51   #12
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
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 :
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
*/
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h07.


 
 
 
 
Partenaires

Hébergement Web