PDA

Voir la version complète : "Arrondir" un vector



ai
05/06/2004, 17h19
hello forum

jai une petite question :
je voudrais deplacer librement un objet partout mais je voudrais qu'il n'aille que sur certains points de l'espace predefinis.

Admettons que l'objet est en 120.80.20 et disons que je veux etablir une grille de position possibles toutes les 100 unités en xyz

le script devrait envoyer lobjet en 100.100.0

mais jai pas trop d'idées comment faire
il faudrait creer une fonction d'arrondi mais je suis nul en math! :oops:

l'ideal ca serait que ce soit applicable a des thinking particules (des objets ca serait deja bien)
je crois pas que l'on puisse appliquer ca a des TP, mais jaimerais me tromper.

merci a tous

Floby
05/06/2004, 17h26
mais si, ça doit être possible en xpresso ou en coffee, par contre pour les tp je peux vraiment pas t'aider je suis tout nul.

Red
05/06/2004, 17h31
Avec le magnétisme de la grille, ça joue pas ?
J'ai jamais utilisé cette option, mais ça devrait marcher, ya pas de raisons...

ai
05/06/2004, 17h55
le but ca n'est pas de caler l'objet a la main, le but c'est qu a n'importe quel moment entre deux keyframes (ou meme sans keyframes) l'objet adopte ce comportement et qu'il se place sur cette grille.

Tengaal
05/06/2004, 18h10
En Coffee ça donnerait ça :

var valeur=120;
var grille=100;

var arrondi;
if (valeur<0) arrondi=-grille/2; else arrondi=grille/2

var magnet=grille*int((valeur+arrondi)/grille);


"valeur" est la coordonnée à traiter, "magnet" est la coordonnée magnétisée suivant la valeur de "grille".
L'arrondi est centré sur 50, c'est à dire "arrondi"
Entre 0 et 49 le résultat est 0.
Entre 50 et 99 le resultat est 100.
Donc 120 donne un résultat de 100 et 160 donnera un résultat de 200.
:wink:

Tengaal
05/06/2004, 18h35
En Xpresso c'est ICI. (http://tengaal.free.fr/fc4d/xpresso/Magnet_Xpresso.c4d)

proparjak
05/06/2004, 18h54
Un autre possibilité serait de faire un "random" de 0 à ce que tu veux, puis de multiplier par 100 sur chaque coordonnée x, y et z de ton vecteur...

ai
05/06/2004, 19h01
ok merci bcq

juste pour mon info personnelle

int supprime les decimales d'un chiffre cest ca?

a propos de ton xpresso ya t il un moyen de manipuler l'objet auquel on a associé a lui meme l'expression? chez moi si je fais ca on ne peut plus deplacer l'objet ds la vue de travail, il faut passer par les coordonnées de position.

enfin, et si cest possible tu seras mon heros, ya t il moyen d associer cet xprsso a un champ de particules. enfin a chaque particule.

parce que jai pas bien compris ce que la valeur position d'un tp refletait

merci encore

[maj]
excuse moi on peut le deplacer mais il faut tirer fort :)

ai
05/06/2004, 19h04
euh proparjak jai pas bien compris ce que tu voulais dire

ai
05/06/2004, 19h37
En fait j utilise un PVolumePosition pour repartir un objet sur une surface et jaimerais que cette repartition suive le meme schema que plus haut.

jai appliqué ton xpresso a la position d'un tp mais ca fait tout disparaitre.

Quelle difference entre une position de tp et position d'objet?

bon sinon si c'est pas possible je peux essayer de distribuer mon objet avec un xpresso classique mais jai peur que la repartition soit pas terrible

ai
05/06/2004, 20h11
désolé d'insister mais jai jeté un oeil au fichier stick2poly du site de maxon qui utilise un xpresso avec un polygon count pour coller des objets dessus.

je me demandais si c'etait possible qu'un xpresso genere des instances ou des copies d'un objet en fonction d'un integer (polygon count par exemple)

ou une fonction d'increment pour polygon_number car ca serait pas tres geek de devoir numeroter chaque instance si on veut distribuer 5000 objets sur un mesh.

huh? :?

Tengaal
05/06/2004, 22h01
ok merci bcq
De rien !


juste pour mon info personnelle
int supprime les decimales d'un chiffre cest ca?
Oui.


a propos de ton xpresso ya t il un moyen de manipuler l'objet auquel on a associé a lui meme l'expression? chez moi si je fais ca on ne peut plus deplacer l'objet ds la vue de travail, il faut passer par les coordonnées de position.
L'Xpresso que j'ai fait est un exemple, je ne sais pas du tout ce que tu veux en faire précisément. Tu as juste à conserver le noeud COFFEE, ensuite tu y fait entrer les coordonnées que tu veux, et tu récupères en sortie les coordonnées "magnétisées" que tu appliques à n'importe quel objet de ta scène...
Dans le cas où un objet est contrôlé par un Xpresso (position, rotation...) il est bien évident qu'on ne peux plus le manipuler manuellement.


enfin, et si cest possible tu seras mon heros, ya t il moyen d associer cet xprsso a un champ de particules. enfin a chaque particule.
parce que jai pas bien compris ce que la valeur position d'un tp refletait
Il faut utiliser un noeud "P Prélever les données" dont tu ajoutes le port de sortie "Position" qui sera connecté au port "coord" du noeud Coffee, le vecteur sortant de celui-ci sera connecté au port d'entrée "Position" d'un noeud "P Définir les données" qui redéfinit donc ainsi la position de chaque particule traitée.


merci encore
De rien encore !

ai
05/06/2004, 22h27
ben c'est ce que jai fait et ca marche pas

voila le projet avec les tp et magnet (http://jan.nerim.net/TPMagnet.c4d.zip)

sinon en ce qui concerne un xpresso classique avec la repartition dobjets sur un autre je coince un peu sur les "objects list" instance et autres iterations.
je voudrais a partir dune object list appliquer la meme fonction a tous les objets en changeant a chaque fois le triangle sur lequel est appliqué l operation

voila le projet avec xpresso classique (http://jan.nerim.net/stick2polyamoi.c4d.zip)[/url]

Tengaal
05/06/2004, 22h42
Bien sûr, si tu utilises un noeud "P Position sur une surface" pour coller tes particules sur une géométrie, tu obtiens directement les positions de chaque particules en sortie (pas besoin de "P Prélever les données").
Tu connectes donc directement la sortie "position" de "P Position sur une surface" sur l'entrée "coord" du noeud Coffee, et tu branches la sortie de celui-ci sur l'entrée "position" de " P Définir les données" et là ça marche.

ai
05/06/2004, 23h14
whaouh c super

juste une petite derniere question
comment fait on pour avoir directement 100 objets dans le tp?
il faut reculer le point de depart de son anim?

et corrigez moi si je me trompe mais le rendu des tp est deconseillé en rendu reseau. pourquoi? meme si chaque image met 1 minutes a calculer?

Tengaal
05/06/2004, 23h37
Pour emettre 100 particules, il faut que dans les paramètres de ton noeud "P Naissance tu définisses le mode "Taux par image", dans le champ "Taux (par image)" tu entres la valeur 100.
Ensuite, il faut que ton emmeteur "P Naissance" ne soit activé que sur une image:
- Tu ajoutes en entrée de "P Naissance" le port "Activer"
- Tu ajoutes un noeud "Temps" (Généralités) auquel tu ajoutes en sortie "Image"
- Tu ajoutes un noeud "Est égal à" (Logique) dont tu définis dans entrée[2] (attributs) le numéro de l'image. (par exemple 10)

Tu connectes la sortie "Image" (Temps) à la première entrée du noeud "Est égal à".
Tu connectes la sortie de celui-ci au port "Activer" de "P Naissance".

Ainsi tes 100 particules seront produites seulement à cette image. :wink:

En ce qui concerne le rendu en réseau des particules, en effet, le problème est lié au motif aléatoire qui est à l'origine de l'émission, cette valeur est créée différemment suivant certains types de processeurs, notamment entre Mac et PC mais parfois entre marques de CPU (Intel, AMD) ou de génération d'un processeur (gestion des virgules flottantes...)
Ce qui fait que si on calcule une animation en réseau, donc découpée
en morceaux dont chacun est calculé sur une machine différente, on peut se retrouver avec des flux différents entre chacune de ses portions, avec au final une animation dont le flux de particules "saute" à certains endroits...

Fluffy
06/06/2004, 00h10
Et donc il suffit de "cuire" (Bake) les anims de particules, c'est-à-dire figer l'émission et l'animation des particules pour qu'elles puissent être rendues en réseau, sans être affectée par les différence de calcul des divers processeurs..