H3D Haptics : X3D et Python




www.h3dapi.org


Comme nous n’avons pas perdu de vue les évolutions du X3D, nous sommes toujours ouverts à des découvertes comme celle de H3D et de son API qui propose de rendre les scènes X3D “touchables” via des dispositifs de téléprésence (bras articulés, gants et autres) c’est ce que l’on nomme l’haptique…

H3D est une extension des nodes X3D existants. Exemple tout simple, pour rajouter une sensation de réponse à une surface on glisse un élément supplémentaire au node Appearance:

<X3D profile='Immersive' version='3.0'>
  <Scene>
    <Group>
      <Viewpoint position="0 0 0.6"/>
      <Shape>
        <Appearance>
          <Material diffuseColor="1 0 0"/>
          <SmoothSurface stiffness="0.4"/>  <---- ajout pour H3D
        </Appearance>
        <Sphere radius="0.05"/>
      </Shape>
    </Group>
  </Scene>
</X3D>

plutôt élégant non ?

il y a mieux, H3D permet de lier X3D et Python :
Via les ROUTES et les Fields de X3D on adresse des scripts et des classes python.

Ici le “IsTouched” d’une sphère reçoit l’info du champ “changeColor” qui est instance de classe python.

le script:

# Import H3D specific functions.
from H3DInterface import *
# ChangeColor is a field that takes and MFBool as input and outputs an SFColor
# The field routed to this class is the isTouched field of X3DGeometryNode
class ChangeColor( TypedField( SFColor, MFBool ) ):
# Only using routes for this field so  only override the update function.
  def update( self, event ):
# The inputed field is initially zero length.
    if len(event.getValue()) > 0 and event.getValue()[0]:
      # If touched return green color
      return RGB(0, 1, 0)
    else:
      # If not touched return red color
      return RGB(1, 0, 0)

# Create an instance of our field. This name is what will be used
# when routing to and from the field.
changeColor = ChangeColor()

et le node X3D:
  <PythonScript DEF="PS" url="mypythonfile.py" />

  <ROUTE fromNode="MySphere" fromField="isTouched"
         toNode="PS" toField="changeColor" />
  <ROUTE fromNode="PS" fromField="changeColor"
         toNode="MyMaterial" toField="diffuseColor" />
  </Scene>
</X3D>

3 Comments

  • November 20, 2009 - 6:34 pm | Permalink

    A ton avis il y a une lib plus generale qui pourrait être utilisée avec GeeXLab?

  • SPRINGER
    November 20, 2009 - 6:39 pm | Permalink

    Pour une lib d’interface haptique j’ai pas cherché à fond mais il y avait ce truc pour la wiimote
    http://www.visualrelativity.com/vpython/

    et peut être des labos de medecine qui utilisent python…

    note que les gars de H3D ont aussi un module pour lier X3D et le ARTag toolkit pour la réalité augmentée.

  • Pingback: HackLAB | JeGX's Infamous Lab

  • Comments are closed.