Scolring - Forum

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.

#1 28-Jul-2011 15:33:36

aurelie
Member
Registered: 8-Jul-2011
Posts: 8

acceder a l'arbre de scene dans la fonction cbKinectData

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

#2 28-Jul-2011 17:37:04

arkeon
Admin. / Scol language & OpenSpace3D developer
From: Nantes
Registered: 30-Mar-2009
Posts: 5,089
Website

Re: acceder a l'arbre de scene dans la fonction cbKinectData

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

#3 28-Jul-2011 20:34:57

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: acceder a l'arbre de scene dans la fonction cbKinectData

Bonjour,

aurelie wrote:

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 ?

aurelie wrote:

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

#4 1-Aug-2011 08:05:05

aurelie
Member
Registered: 8-Jul-2011
Posts: 8

Re: acceder a l'arbre de scene dans la fonction cbKinectData

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

#5 1-Aug-2011 08:25:59

arkeon
Admin. / Scol language & OpenSpace3D developer
From: Nantes
Registered: 30-Mar-2009
Posts: 5,089
Website

Re: acceder a l'arbre de scene dans la fonction cbKinectData

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

#6 1-Aug-2011 13:18:16

aurelie
Member
Registered: 8-Jul-2011
Posts: 8

Re: acceder a l'arbre de scene dans la fonction cbKinectData

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

#7 1-Aug-2011 13:21:25

arkeon
Admin. / Scol language & OpenSpace3D developer
From: Nantes
Registered: 30-Mar-2009
Posts: 5,089
Website

Re: acceder a l'arbre de scene dans la fonction cbKinectData

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

#8 1-Aug-2011 14:01:54

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: acceder a l'arbre de scene dans la fonction cbKinectData

... ou encore afficher et placer un marqueur 3d entre la caméra et l'objet concerné

Offline

#9 8-Aug-2011 12:36:46

aurelie
Member
Registered: 8-Jul-2011
Posts: 8

Re: acceder a l'arbre de scene dans la fonction cbKinectData

Je vous remercie, grâce a vos réponses j'ai réussi à faire ce que je souhaitais

Offline

#10 8-Aug-2011 12:45:44

arkeon
Admin. / Scol language & OpenSpace3D developer
From: Nantes
Registered: 30-Mar-2009
Posts: 5,089
Website

Re: acceder a l'arbre de scene dans la fonction cbKinectData

Salut!

Si tu souhaites montrer ce que tu as fait n'hesites pas à créer un post sur ton projet dans le forum showcase.

Offline

#11 8-Aug-2011 15:46:10

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: acceder a l'arbre de scene dans la fonction cbKinectData

Si tu as quelques bouts de codes à montrer aussi ;-)

Offline

#12 9-Aug-2011 09:46:18

aurelie
Member
Registered: 8-Jul-2011
Posts: 8

Re: acceder a l'arbre de scene dans la fonction cbKinectData

Une dernière question

Où est défini la structure SO3_OBJECT ?

Offline

#13 9-Aug-2011 10:34:14

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: acceder a l'arbre de scene dans la fonction cbKinectData

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

Board footer

Powered by FluxBB