PDA

Voir la version complète : Convertir un vecteur en rotation



César Vonc
12/05/2011, 16h24
Bonjour.

Je cherche à reproduire en Coffee l'effet de la propriété Cible, pour un script qui permettra de trouer des objets plus rapidement en créant un cylindre et un booléen directement sur des polygones sélectionnés.


Tout va pour le mieux jusqu'à la rotation de mon cylindre.
J'ai pu calculer un vecteur normalisé orienté selon les normales de mes polygones sélectionnés, mais comment en déduire une rotation pour mon cylindre ?

J'ai essayé en mélangeant des sinus, cosinus et tangentes, mais il y a toujours un moment où mon cylindre part en couille.


Une matrice de rotation résoudrait-elle mon problème ? Est-ce possible en Coffee ?


C'est plus des maths que du Coffee, certes, mais il y a peut-être un spécialiste dans la parages.

xs_yann
12/05/2011, 17h20
Salut,

Peut-être avec '[vector] VectorToHPB([vector] v);' ?

Tu as regardé le code cpp du SDK : plugins > cinema4dsdk > source > tag > lookatcamera.cpp ?

edit :

Voilà le bout qui pourrais t'intéresser :

/////////////////////////////////////////////////////////////
// CINEMA 4D SDK //
/////////////////////////////////////////////////////////////
// (c) 1989-2004 MAXON Computer GmbH, all rights reserved //
/////////////////////////////////////////////////////////////

// "look at editor camera" expression example

[...]

EXECUTIONRESULT LookAtCamera::Execute(BaseTag *tag, BaseDocument *doc, BaseObject *op, BaseThread *bt, LONG priority, EXECUTIONFLAGS flags)
{
BaseDraw *bd = doc->GetRenderBaseDraw(); if (!bd) return EXECUTIONRESULT_OK;
BaseObject *cp = bd->GetSceneCamera(doc);
if (!cp) cp=bd->GetEditorCamera();
if (!cp) return EXECUTIONRESULT_OK;

Vector local = cp->GetMg().off * (!(op->GetUpMg() * op->GetFrozenMln())) - op->GetRelPos();
Vector hpb = VectorToHPB(local);

if (!tag->GetData().GetBool(LOOKATCAMERAEXP_PITCH))
hpb.y = op->GetRelRot().y;

hpb.z = op->GetRelRot().z;

op->SetRelRot(hpb);

return EXECUTIONRESULT_OK;
}



edit : saloperie de yann :p

:icon_nono:

valkaari
12/05/2011, 17h22
j'ai rien compris à la question mais dans le sdk coffe, tu as la fonction
vector VectorToHPB(vector v)

qui transforme donc un vecteur en rotation HPB qui sont renvoyé sous forme de vecteur (H,P,B)

si ça aide.


edit : saloperie de yann :p

César Vonc
12/05/2011, 19h30
Ah ben merde, c'est presque trop facile du coup, avec cette fonction.


Bon et bien mon script est quasiment fini, merci pour vos réponses. J'ignorais qu'on pouvait directement voir le script des fonctions de c4d.