OMKReusableComponents

Un article de OpenMASKWiki.

Jump to: navigation, search

Sommaire

Composants OpenMASK réutilisables

Les composants de base d'OpenMASK sont les objets de simulations. On distingue les classes simples OSO (OMK::SimulatedObject) et les classes extensibles ESO (OMK::ExtensibleSimulatedObject). OpenMASK définit ses propres types de données afin d'y associer de nouvelles propriétés Types_Avec_SimpleTypeT et [1]].
Actuellement nous vous encourageons à programmer systématiquement des OESO. Les nouvelles extensions sont définies par des classes d'extension OMK (OMK::Extension). Une extension peut être spécifique à un objet de simulation ou bien générique. Dans ce dernier cas elle peut étendre tout type d'objet. Les paramètres d'un OESO sont principalement des attributs [2]. Ceux ci peuvent se décliner en entrée, en sortie ou encore être associés à un évènement. Ces associations peuvent éventuellement être déclarées dans le fichier de configuration.
Le composant particulier de rendu visuel Ogre (OMK::Vis::OgreVis) a son propre mécanisme d'extension par objets visuels (OMK::Vis::OgreObject) et par animateurs (OMK::Vis::OgreAnimator).

Composants de base génériques

Classes d'OSO

Classes d'ESO

Clock

Une classe pour asservir la vitesse d'exécution de la simulation au temps réel de l'utilisateur. On appelle cela le temps interactif. Cela donne l'impression à l'utilisateur d'interagir en temps réel sur la simulation. Cela ne fonctionne bien que si la simulation va au moins aussi vite que le temps réel.

  • plugin : noyau OMK
  • FactoryName : Clock

SupportedObject

Voir la page des exemples.

Classes de types de données et d'attributs

Classes d'extensions OMK

KeyEmitterExtension

Une classe d'extension pour tout type d'objet qui permet d'envoyer un évènement à partir de la frappe d'une touche clavier.

  • plugin : ["${OMK_HOME}/lib" "OMKInputs"]
  • FactoryName : KeyEmitterExtension
     Class KeyEmitterExtension
     Key P // the key which is used to trigger the action
     InputSenderName visualisation // the default is "visualisation" needed to create the key listener
     EventName eventId // The id of the event or signal
     Signal on/off // by default is set to on 
                   // on: the extension fire a signal, off: the extension emit a event
     Listeners [ obj1 obj2 ... ] // the list of the object which listen

KeyEmitterExtensionT<>

Une classe d'extension pour tout type d'objet qui permet d'envoyer un évènement valué à partir de la frappe d'une touche clavier. Les valeurs sont définies dans un vecteur de valeurs. A chaque usage de la touche, la valeur suivante est envoyée. Après la dernière valeur, on recommence au début.

Deux usages

  • Soit de façon classique, l'événement est envoyé aux objets dont les noms sont fournis dans le paramètre Listeners
  • Soit pour un auto envoi au propriétaire de l'extension si le paramètre listener est remplacé par le paramètre AttributeId

KeyTransformEmitterExtension

Permet d'envoyer un événement avec un transform en valeur

  togglePosition
   {
     Class KeyTransformEmitterExtension
     Key P
     InputSenderName visuOgre
     EventName "current_value_of_Position"  // \
     Signal off                                               //  > replaced by AttributeId Position
     Listeners [ "movingPoint" ]                     // /
     Values[ [ [0 0 10] ] [ [10 0 0] ] [ [0 10 0] ] ]
   }

Avec le cas particulier où on envoie l'evenement à l'objet possedant cette extension

  togglePosition
   {
     Class KeyTransformEmitterExtension
     Key P // the key which is used to trigger the action
     InputSenderName visuOgre // the default is "visualisation" needed to create the key listener
     AttributeId Position // The id of the attribute to set
     Values[ [ [0 0 1] ] [ [1 0 0] ] [ [0 1 0] ] ] // the values for the signal or event
  }

Une liste en cours

Voici quelques types prédéfinis avec des types basiques, des types OMK, des types spécifiques.

typedef KeyEmitterExtensionT< int, OMK::Type::IntType > KeyIntEmitterExtension ;
typedef KeyEmitterExtensionT< float, OMK::Type::FloatType > KeyFloatEmitterExtension ;
typedef KeyEmitterExtensionT< bool, OMK::Type::BoolType > KeyBoolEmitterExtension ;
typedef KeyEmitterExtensionT< OMK::Type::StringType, OMK::Type::StringType > KeyStringEmitterExtension ;
typedef KeyEmitterExtensionT< Name, Name > KeyNameEmitterExtension ;
typedef KeyEmitterExtensionT< OMK::Type::Transform, OMK::Type::TransformType > KeyTransformEmitterExtension ;
typedef KeyEmitterExtensionT< OMK::Type::Color, OMK::Type::ColorType > KeyColorEmitterExtension ;
typedef KeyEmitterExtensionT< std::pair< OMK::Name, OMK::Name >, OMK::Type::SimpleTypeT< std::pair< OMK::Name, OMK::Name > > > KeyConnectEmitterExtension ;

TransformAttributDisplayExtension

TransformAttributDisplayExtension herite de GenericKeyExtension< ExtensibleSimulatedObject >

  • plugin : ["${OMK_SRC}/OMK-AC-Dev/inst/lib" "OMKAC"]
  • FactoryName : TransformAttributDisplay
anObject
{
 Class anOMKClass
 ...
 Extensions
 {
   CurrentPosition
   {  
    Class TransformAttributDisplay
    Key I // default is "P"
    InputSenderName visualisation // default is "visualisation". needed to create the key listener
    Attribute Position // the name of the attribute to display
  }
...
 }
}

Cette extension peut etre ajoutée à tout objet extensible possedant un attribut de type transform.
A chaque appui de la touche donnée en paramètre de l'extension affiche dans la console et le fichier de trace la translation, la rotation et l'échelle de l'attribut nommé. La rotation est fournie en euler et en quaternion.
Cette extension ne fonctionne qu'en mode DEBUG comme le système de trace actuel d'OpenMASK. La trace enregistrée ressemble à ceci :

[MESSAGE] in "OMK::ACContribs::TransformAttributDisplayExtension::action" of ..\..\..\..\Source\OMKAC\Source\OTTransformAttributDisplayExtension.cpp@109
Object= conveyorA  Attribute= transform  Numero d'appel= 1
Obj Wm4 Position  x= 135.32 y= 9 z= 367.995
obj Euler orientation pitch = -0 head= -2.98451 roll 0
Obj Wm4 quat Orientation w= -0.0784592 x= 0 y= 0.996918 z= 0
Obj Wm4 Scale  x= 1 y= 1 z= 1

Lorsque ce fichier est très chargé, vous pouvez faire une recherche sur un des mots caractéristiques de ce message.

OgreCameraDisplayExtension

OgreCameraDisplayExtension herite de GenericKeyExtension< OMK::Vis::OgreVis >

  • plugin : ["${OMK_SRC}/OMK-AC-Dev/inst/lib" "OMKAC"]
  • FactoryName : OgreCameraDisplay
visualisation1
{
  Class OgreVis
  ...
  Extensions
  {
    CurrentCameraPosition
    {
      Class OgreCameraDisplay
      Key f3 // default is "P"
      InputSenderName visualisation2 // default is "visualisation"
      // needed to create the key listener
      ViewportNumber 0 // default is 0
      // viewport hosting the wanted camera
      RotateMode "euler" // default is euler
      // euler : x/pitch y/head z/roll
      // quaternion : wq wx wy wz
      }
  ...
 }
}

Cette extension ne peut être ajoutée qu'à un OSO visualiseur.
A chaque appui de la touche donnée en paramètre de l'extension affiche dans la console et le fichier de trace la translation et la rotation et l'échelle de la camera du viewport nommé. La rotation est fournie au choix selon RotateMode en euler et en quaternion.
Cette extension ne fonctionne qu'en mode DEBUG comme le système de trace actuel d'OpenMASK.

Classes spécialisées réutilisables

Notre équipe travaillant autour de la réalité virtuelle, nous avons bati des objets de simulation spécialisés pour les applications de réalité virtuelles immersives, interactives et collaboratives.

Services de rendus

Modèle générique de service de rendus

Un service de rendus exécute le rendu effectif d'un type de propriétés (visuel, sonore, physique) des objets de simulation de l'application OpenMASK.
Dans le cadre de notre architecture PAC, nous proposons un ensemble de classes génériques ou spécialisables constituant un squelette de support au développement de tout nouveau service de rendu.
Ce modèle a déjà été utilisé pour développer le service de rendu visuel Ogre, celui du service de rendu visuel OpenSG, etc...

Service de visualisation Ogre

Cette classe d'objet extensible OgreVisu rend un service de rendu visuel basé sur la bibliothèque Ogre 3D. Un module lui est consacré dans la documentation en ligne [3].

Service de visualisation OpenSG

Ce service est constitué de la classe OSGVisOSO et de ses compléments OSGVO et OSGAnimatorT, ainsi que de nombreuses spécialisations d'objets de service et d'animateurs.

Cabine virtuelle d'Immersion et d'interaction

La Cabine Virtuelle d'Immersion et d'Interaction (CVII) est notre paradigme organisant l'immersion et l'interaction dans un monde virtuel.

Interaction collaborative

Nous proposons un concept générique d'interactions, éventuellement collaboratives, basé sur les objets interactifs et les outils interacteurs. Ceux ci sont construits en ajoutant des extensions spécifiques à des ESO. Ces extensions assurent un protocole de dialogue pour prendre le controle d'un objet et le manipuler.

Navigation