PDA

Voir la version complète : Aligner l'axe d'un objet vers un objet cible



pasto
31/05/2012, 15h27
Bonjour,

Je cherche à modifier l'alignement de l'AXE d'un objet (et uniquement l'axe) de sorte qu'il pointe vers un objet spécifique.

Le Z de l'axe pointant vers 0,0,0 en l'occurrence.

Merci beaucoup

valkaari
31/05/2012, 15h56
C'est pas très clair comme question. Il faut un peu plus d'info ou être plus précise dans les termes pour qu'on puisse savoir ce que tu veux faire. La réponse en dépends.

Sir Gong
31/05/2012, 16h19
Il cherche l'équivalent du tag cible mais qui ne pivote pas l'objet, seulement ses axes.

pasto
31/05/2012, 16h26
OK,

J'ai un objet polygonal, l'alignement de son axe ne me permet pas de contrôler comme je le voudrais son animation avec un effector mograph, je voudrais en effet le faire bouger en z et mograph prend en compte bien entendu son axe de rotation. Je voudrais donc modifier son axe en orientant le Z de l'axe vers un point donné (0,0,0 par exemple) sans changer sa position bien entendu.

Je voudrais donc que mon axe s'oriente en fonction d'un objet cible.

Ce n'est pas super clair, je suis désolé.

geantvert
31/05/2012, 17h31
C'est toujours pas très clair.... une petite image?

Edit: 2000 posts champagne !!

pasto
31/05/2012, 17h53
En fait comme le dit Gong ce serait exactement la même chose que le tag target (cible ?) lorqu'on le place sur un objet et qu'on lui donne un objet référence. Mais appliqué à l'axe d'un objet.


Sachant que le tag est animable alors que moi je voudrais juste l'orienter définitivement.

Voilà un petit croquis :

druide
31/05/2012, 17h57
Tu cliques sur le repère d'axe jaune orange à gauche, tu decales tes axes à ta convenance, et tu te remets en normal.
Ce n'est peut-être pas forcément très clair, je te ferai un printscreen.

Cela te permettra d'avoir ton objet où tu veux mais avec son axes en 0, 0, 0, si c'est ce que tu souhaites.


Edit : ?
Je ne comprend plus, ne tiens pas compte de ce que j'ai écrit.

pasto
01/06/2012, 14h02
Merci en tout cas Druide, c'est bien l'orientation de l'axe qui m'intéresse et non sa position.

Je voudrais que mon axe "regarde" vers un point donné.

merci

geantvert
01/06/2012, 14h13
Ça m’étonnerait grandement que tu puisse le faire uniquement sur l'axe de l'objet si ce n'est à la main.
Sinon tu peux toujours mettre un null en enfant de ton objet et lui assigner un tag cible aligné sur l'axe de l'origine du monde (via un autre null).

Mais j'ai du mal à comprendre le pourquoi de ta question, je ne vois pas le but.

xs_yann
01/06/2012, 18h34
Voici un script qui, a priori, fait ce que tu veux :


import c4d
from c4d import gui, documents, utils

def main():
doc = documents.GetActiveDocument()
objects = doc.GetActiveObjects(False)
if (len(objects) != 2):
gui.MessageDialog('You must select two objects')
return
target, obj = objects[0], objects[1]
if not obj.CheckType(c4d.Opoint):
target, obj = obj, target
if not obj.CheckType(c4d.Opoint):
gui.MessageDialog('You must select a polygonal object and a target')
return

local = target.GetMg().off * (~(obj.GetUpMg() * obj.GetFrozenMln())) - obj.GetRelPos();
hpb = utils.VectorToHPB(local)
targetMatrix = utils.HPBToMatrix(hpb)

mg = obj.GetMg()
mg.off = c4d.Vector(0)
pcnt = obj.GetPointCount()

doc.StartUndo()

for i in xrange(pcnt):
point = obj.GetPoint(i)
doc.AddUndo(c4d.UNDOTYPE_CHANGE, obj)
obj.SetPoint(i, point * mg * ~targetMatrix)

doc.AddUndo(c4d.UNDOTYPE_CHANGE, obj)
obj.SetAbsRot(hpb)

doc.EndUndo()

obj.Message(c4d.MSG_UPDATE)
c4d.EventAdd()


if __name__=='__main__':
main()

Il suffit de sélectionner ton objet polygonal et ta cible et de lancer le script. D'après ce que j'ai compris tu veux l'orienter définitivement donc un tag ne te servira pas mais le code est facilement adaptable.

Par contre, je n'ai pas poussé plus loin : c'est l'axe Z qui pointe vers la cible, tu ne peux pas définir de "up vector" et les enfants de l'objet se déplacent avec les axes.

Bon courage.

Sir Gong
01/06/2012, 19h23
Ah ben heureusement que t'es là toi, tu sauves l'honneur de la French. :afro:

pasto
01/06/2012, 19h37
C'est exactement ça xs_Yann, merci beaucoup !

Sublime.

Cela peut servir géant vert quand on veut faire un truc précis dans mograph et que les axes des objets clonés (dont vont dépendre les mouvements des clones) ne sont pas tous orientés vers un même point (dans le but d'atteindre un mouvement concentrique par exemple). Mais je suppose que c'est utile dans bien d'autres cas.

Merci encore xs_yann, superbe.

Aurety
02/06/2012, 00h40
Merci xs_yann, trés utile ! On pourrait avoir l'option : je sélectionne la cible en premier objet et tous les autres ensuite pointeront vers le premier. Je dois les faire un par un et sur 100 objets c'est un peu long :blush:

Sinon beh comme d'hab' tu es grand ! :thumbup1: