PDA

Voir la version complète : Problème Comparer & Conditions



fab__
20/03/2013, 12h03
Salut tous le monde

J' ai une scène avec une donnée utilisateur pour faire bouger sur les Y un rectangle

http://www.fabiengibert.com/image/xpresso.JPG


Mon problème est qu'en sortie des comparateurs ou conditions j'ai une valeur vrai ou fausse
donc dans mon cas 0 , 1 , 2 ... et je souhaiterais par exemple avec une cartographie d'intervalle
retranscrit mon résultat 0 à 1 et le faire passé de 0 à 100
le hic c'est qu'il passe de 0 à 100 sans passer par les valeurs intermédiaire 123456789...
Je n'ai donc pas un mouvement fluide en l’occurrence mon cube dirigé par un bouton vecteur
2d se trouve soit à 0 soit à 100.
Y a t'il un noeud permettant de retranscrire true or false en une valeur qui passera par les nombres
intermédiaire lors du déplacement de mon bouton?

ma scène si vous souhaitez jeter un oeil (http://www.fabiengibert.com/image/xpresso.c4d)

:crying:

tabou
20/03/2013, 14h02
Le nœud monoflop est ton ami, c'est l'équivalent d'une minuterie, va voir sur le site de base 80 ce mini tut (http://www.base80.org/index.php/2006/03/13/mono_flop_tut_1) qui explique bien son fonctionnement.

xs_yann
20/03/2013, 14h35
Salut,

La solution que t'as donné Tabou est surement meilleure, mais si jamais tu veux faire une incrémentation linéaire tu peux faire un truc comme ça :

http://www.xsyann.com/fc4d/xpresso_inc.png

Tu compares ta valeur en entrée (soit 0, soit 100, etc) avec ta position Y actuelle. Et tu fais une condition pour avoir en retour :
Si position courante < input : position Y + constante
Sinon : la position actuelle

Et pareil pour la soustraction.

Fluffy
20/03/2013, 14h45
Et pour info, une comparaison logique est toujours équivalente à 0 ou 1 (un booléen). Il n'est pas possible d'avoir un statut qui est partiellement vrai ou faux (soit la condition testée est vraie, soit elle est fausse, mais jamais entre les deux).

valkaari
20/03/2013, 14h50
j'ai même pas compris ce que tu veux faire moi en fait xD

fab__
20/03/2013, 16h05
Merci pour vos indices

Je me fais de petits exercices sur les comparateurs et conditions pour une une future utilisation sur des personnages
animés histoire de pouvoir pousser l'automatisation .

Ma question était : y a t il un noeud permettant de transformer ces valeurs vrai faux (0-1) en suite de nombres du style
0 puis 0.1 puis 0.2 puis 0.3...
Ce qui me permettrait de passer d'une condition à une autre de manière progressive et non pas arrêtée : 10, 50 ou etc.

Mais comme tu l'as bien dis Fluffy ça ne paraît pas possible.

L'idée du mono flop est intéressante mais je ne souhaite pas avoir de durée déterminée.

Je me disais qu'il avait peut être un moyen de créer des valeurs entre ce 0 et ce 1.

:biggrin:

Fluffy
20/03/2013, 16h07
Yann t'a donné un exemple parfait pour ce que tu souhaites faire, mais cela sous-entend bien entendu que la valeur à laquelle tu compares ton noeud soit une valeur qui change de manière progressive (dans son exemple, la progression d'un cube sur l'axe Y).

fab__
20/03/2013, 17h09
Bien reçu
merci pour vos conseils

Aurety
20/03/2013, 23h40
Tu peux également utiliser la cartographie d'intervalle ( et donc sa spline ) pour pouvoir faire une transition moins brutale en la couplant par exemple à un noeud temps mais encore une fois le monoflop est parfait pour ça.

Fluffy
21/03/2013, 02h02
Pas de transition possible sur un booléen, même avec une cartographie d'intervalle, puisqu'il ne sort que deux valeurs (0 et 1), pas de valeurs intermédiaires.
Il faut juste repenser l'Xpresso, pour avoir une évolution graduelle en plus du booléen (comme Yann le suggérait).

Aurety
21/03/2013, 08h08
je n'ai pas dit d'utiliser un noeud qui te sert un booléen mais d'utiliser juste une cartographie d'intervalle pour faire une sortie qui varie de 0 à 1.

xs_yann
21/03/2013, 10h04
j'ai même pas compris ce que tu veux faire moi en fait xD

Je suis pas sur d'avoir compris non plus.

Je tente quand même un autre exemple :

http://www.xsyann.com/fc4d/xpresso_factor.png

Ici on a en entrée la position Y et une constante qui représente la position à atteindre. On les soustrait et on les multiplie par une constante. On ajoute le résultat à la position actuelle. Ca permet d'avoir une transition plus douce.

pos = oldPos + (oldPos - newPos) * factor

clemz
21/03/2013, 10h26
j'ai même pas compris ce que tu veux faire moi en fait xD

haha t'es vraiment neuneu en fait toi !? :D ( moi non plus je n'ai pas compris .. :P )

valkaari
21/03/2013, 11h57
C'est rassurant xD

j'ai l'impression que tu veux faire un slider en fait qui de 0 à 25 sort 0->100 et de 25 à 65 sort 100->200

fab__
21/03/2013, 14h31
Je vous fais parvenir une nouvelle scène comme exemple
la première n'était pas clair ...

Est-ce que je peux avoir une transition soft entre les deux valeurs que je donne au cube Y
en changeant la valeur de ma donnée utilisateur.
Bien sûr je pourrais passer par une cartographie d'intervalle pour un exemple si simple.
mais l'idée c'est de capter un peu plus ce que je peux faire avec les conditions.

Scène xpresso (http://www.fabiengibert.com/image/xpresso/)

xs_yann je capte pas, pourrais-tu m'envoyer la scène de ton premier exemple
envoyée hier à 14h35.

Fluffy
21/03/2013, 14h46
Pour un exemple comme celui-ci: cartographie d'intervalle.
Par contre on n'est plus dans les paramètres de test de condition, là.

Si tu veux prendre une condition en considération, tu pourrais peut-être utiliser le statut d'une condition pour activer le mouvement graduel d'un objet entre deux valeurs.
Faudrait que je réfléchisse à une manière de faire cela dès que j'ai un peu de temps, mais c'est faisable.

clemz
22/03/2013, 09h44
je dois vraiment être neuneu car je ne pige toujours pas ce que tu veux faire :S .

Supposons que tu veuilles faire bouger le cube en Y , de 2 façons :
une 1ère de -100 à 0 sur la donnée utilisateur , qui ferait bouger le cube de -50 à 0
et une 2ème de 0 à +100 , qui ferait bouger le cube (d'une autre façon donc ) genre de 0 à120

il faut donc effectivement un noeud comparaison pour detecter si on est dans l'intervalle -100 à 0 ou 0 à +100 de la donnée . Ce noeud tu le branches sur le switch d'un noeud condition avec 2 entrées . Sur ces 2 entrées tu branches 2 range mapper ( cartographie blabla ) eux mêmes connectés en entrée sur ta donnée utilisateur avec pour un rangemapper : input lower -100 input upper 0 , output lower -50 output upper 0 , et les options "clamp" en min et max
pour l'autre range mapper : input low 0 upper 100 , output low 0 upper 120 , clampé aussi .
En sortie de ton noeud conditions tu branches ton cube / position Y (ou global position Y .. ça dépend de ce que tu cherches .. position locale ou globale ) .
A ce stade tu vas avoir 2 modes de déplacement "linéaires" pour ton cube .. donc une espèce de cassure dans la "vitesse" du mouvement à 0 sur ta donnée car il va décrire un parcours plus grand au dessus de 0 (bouge de '120' sur +0 +100 ) que en dessous de 0 (bouge de '50' sur -100 +0) . Tu peux donc maintenant jouer avec les splines des noeuds rangemapper pour venir créer une espèce de "tangence" en 0 et que la vitesse soit grosso modo la même autour de 0 sur ta donnée utilisateur .. le cube subira alors une phase de décélération quand ta donnée arrivera sur 0 , et réaccélérera suivant que ta donnée arrive en +100 ou -100 .

xs_yann
22/03/2013, 10h02
xs_yann je capte pas, pourrais-tu m'envoyer la scène de ton premier exemple

La scène : http://www.xsyann.com/fc4d/xpresso_fab.c4d

Je t'ai mis trois Xpresso : le deuxième exemple que j'ai posté avec la multiplication, le premier exemple avec Xpresso modifié, et une implémentation toute simple du premier exemple en Python.

J'ai un peu revu l'Xpresso car ce n'était pas si simple d'ajouter la partie soustraction.

http://www.xsyann.com/fc4d/xpresso_fab_small.png (http://www.xsyann.com/fc4d/xpresso_fab.png)

Donc tu as en entrée 0 ou 200. Ce qu'on cherche c'est d'avoir -1 si c'est supérieur à la position courante, 1 si c'est inférieur ou 0 si les positions sont égales.
Ensuite il suffit de multiplier une constante de notre choix (ici 3.5) par ce résultat ce qui nous donne soit 'constante' soit '-constante' soit 0.
On ajoute ça à la position courante et on Clamp le résultat pour être sûr de ne pas sortir des bornes.

fab__
25/03/2013, 16h51
Merci clemz & xs_yann pour vos solutions.
je prends le temps de regarder tout ça en détail et reviens vers vous si j'ai des questions.

Merci encore