Entraides et échanges autour de la technologie Scol - Informations and exchanges on the Scol technology
Vous pouvez changer la langue de l'interface une fois inscrit - You can change the language once registered
You are not logged in.
Bonjour,
Dans la fonction cbKinectData je souhaiterai pouvoir sélectionner un objet de ma scène. Je ne trouve pas comment accéder à l'arbre de scène.
Est-ce que les "Node" dans le fichier _mtree.pkg correspondent aux objets de la scène? Comment peut-on dire que l'on sélectionne l'objet ?
Merci pour vos réponses
Offline
Bonjour,
je ne suis pas sur de la question ^^
si le but est de lier un objet à un joint du skelette kinect il faut passer par plugIt object position par exemple et setter la position / orientation renvoyée par les events kinectUser
pour le faire en code il faut récupérer l'object par son nom complet et setter sa position et orientation en fonction du joint kinect
le fichier _mtree n'est pas utilisé par openspace
Offline
Bonjour,
Dans la fonction cbKinectData je souhaiterai pouvoir sélectionner un objet de ma scène. Je ne trouve pas comment accéder à l'arbre de scène.
Vois la réponse d'Arkeon !
De façon complémentaire, vois au niveau de la fonction de création / initialisation du plugin (ckinectuser.pkg -> cbNewOb) si tu as besoin d'une donnée supplémentaire à inclure dans la structure PlugKinectUserStr (ligne 620). Dans ce cas, il te faudra bien sur la redéfinir.
Ceci dit, ta question n'est pas claire.
De plus, cherches-tu à récupérer un objet dans la scène 3d ou un objet graphique 2d dans l'arbre des objets, sur la gauche de l'interface d'openspace3d ? Ou autre chose ?
Est-ce que les "Node" dans le fichier _mtree.pkg correspondent aux objets de la scène? Comment peut-on dire que l'on sélectionne l'objet ?
Le fichier _mtree.pkg est une ancienne bibliothèque essentiellement concervée pour compatibilité (si jamais elle a été utilisée un jour ! je n'en ai aucun souvenir).
Offline
Avec un geste de la main je souhaite pouvoir sélectionner un objet dans ma scène 3d puis pouvoir passer à un autre objet (grâce à un autre geste), de façon à pouvoir parcourir tous les objets de ma scène.
Offline
Bonjour,
pour cela tu peux utiliser les fonctions du SO3Engine pour parcourir le scene tree vois la documentation dans le svn : trunk/plugins/SO3Engine/Docs/html/group__grpso3obj.html en particulier SO3ObjectGetChildren.
Offline
Merci pour cette réponse, cela m'a permis de choisir l'objet que je souhaite.
Mais j'ai encore une petite question: une fois que j'ai récupéré mon objet (dans la fonction cbKinectData) comment je peux dire qu'il est sélectionné dans la scène 3D ?
Offline
hmm tout dépend de ce que tu veux faire.
les plugITs sont destinées a être exécutés en mode "play" pas en mode éditeur,
l'arbre n'est donc pas accessible en mode "play".
pour "simuler" une sélection tu peux faire varier la couleur des matériaux ou faire un plugIt showBoundingBox pour activer la bounding box d'un objet.
Offline
Je vous remercie, grâce a vos réponses j'ai réussi à faire ce que je souhaitais
Offline
Une dernière question
Où est défini la structure SO3_OBJECT ?
Offline
Salut,
SO3_OBJECT est une structure définie dans le SO3Engine (elle fait partie du langage Scol).
Sa définition est ici :
http://redmine.scolring.org/projects/so … O3SCOL.cpp dans la fonction loadingSO3EngineMachine qui est la fonction d'initialisation et de chargement de l'API du moteur 3d :
/*!
* \brief Load the SO3Engine
* \param m : The VM
*/
int loadingSO3EngineMachine(mmachine m)
{
int k = 0;
k = PKhardpak(m, "SO3Engine", NbSO3EnginePKG, SO3EngineName, SO3EngineFunc, SO3EngineNArg, SO3EngineType);
SO3SCENETYPE = OBJregister(2, 1, destroyScene, "SO3_SCENE");
SO3OBJTYPE = OBJregister(1, 1, destroyObject, "SO3_OBJECT");
SO3ANIM = OBJregister(1, 1, destroyAnim, "SO3_ANIM");
SO3ANIMTRACK = OBJregister(1, 1, destroyAnimTrack, "SO3_ANIMTRACK");
SO3MATERIAL = OBJregister(1, 1, destroyMaterial, "SO3_MATERIAL");
SO3TEXTURE = OBJregister(1, 1, destroyTexture, "SO3_TEXTURE");
SO3VPTYPE = OBJregister(0, 1, destroyViewport, "SO3_VIEWPORT");
SO3PHYSICSMATERIALTYPE = OBJregister(1, 1, destroyPhysicsMaterial, "SO3_PHYSICMATERIAL");
SO3PHYSICSMATERIALPAIR = OBJregister(4, 1, destroyPhysicsMaterialPair, "SO3_PHYSICMATERIALPAIR");
SO3PHYSICBODY = OBJregister(1, 1, destroyPhysicsBody, "SO3_PHYSICBODY");
SO3WIDGET = OBJregister(7, 1, destroyWidget, "SO3_WIDGET");
SO3BUFFER = OBJregister(2, 1, destroyBufferOgre, "SO3_BUFFER");
// Callback Definition for Buffer Ogre Object
BUFFER_PRE_RENDER_EVENT = OBJgetUserEvent();
OBJdefEvent( BUFFER_PRE_RENDER_EVENT, (int (__cdecl *)(struct Mmachine *,int,unsigned int,int,int,int *))getBufferPreRenderEvent );
BUFFER_POST_RENDER_EVENT = OBJgetUserEvent();
OBJdefEvent( BUFFER_POST_RENDER_EVENT, (int (__cdecl *)(struct Mmachine *,int,unsigned int,int,int,int *))getBufferPostRenderEvent );
return k;
}
Plus précisément la ligne :
SO3OBJTYPE = OBJregister(1, 1, destroyObject, "SO3_OBJECT");
Cette ligne l'initialise en tant qu'objet Scol utilisable dans les packages (*.pkg)
Enfin, elle sera reconnue dans l'API une fois la fonction PKhardpak exécutée (au tout début de la fonction ci-dessus)
k = PKhardpak(m, "SO3Engine", NbSO3EnginePKG, SO3EngineName, SO3EngineFunc, SO3EngineNArg, SO3EngineType);
Cette fonction prend 4 tableaux en derniers arguments qui définissent l'Api. Ici ces 4 tableaux précèdent la fonction loadingSO3EngineMachine (cf lien donné).
Offline