H3Dの使用例


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

H3DAPIを使った例

H3DAPIに含まれて配布されている例

H3DAPI/examplesフォルダに移動し、検索パスを入力すれば、参照することができるでしょう。

X3Dのみを使用した例

X3Dファイルのみが使用されている例がこちらです。中にはH3Dの固有ノードが利用されているものもあります。
  • CubeMap/CubeMap.x3d - ComposedCubeMapTextureノードを使ったデモ。
  • DepthMapSurface/depthMappedITS.x3d - DepthMapSurfaceノードを使って、シンプルな板の触覚を表現。OpenHapticsrendererは利用していません。
  • DepthMapSurface/depthMappedSphere.x3d - DepthMapSurfaceノードを使って、球形の触覚を表現。OpenHapticsrendererは利用していません。
  • ForceEffects/forcefield.x3d - ForceFieldノードのデモ。触覚デバイスを右に押そうとする力を発生させます。
  • ForceEffects/magneticGeometryEffect.x3d - MagneticGeometryEffectノードのデモ。 スプリングはジオメトリの表面に向かって触覚学装置を引きよせます。
  • ForceEffects/positionFunctionEffect.x3d - PositionFunctionEffectノードのデモ。位置情報から触覚デバイスへ送る力を計算します。
  • ForceEffects/timeFunctionEffect.x3d - TimeFunctionEffectノードのデモをします。時間によって触覚デバイスへ送る力を計算します。
  • HapticLayers/hapticLayers.x3d - 異なった表面の表現法を示しています。箱の中に別の箱が入っていますが、質感はそれぞれ異なります。
  • magneticlines/magneticlines.x3d - 引き寄せる性質を持つ線を表示します。OpenHapticsrendererのみを利用しています。
  • Shader nodes/cg_glass.x3d - H3DAPIでどうシェーダを使用するかの例。ガラスで作られているように見せるためCG言語を使用します。
  • Shader nodes/glsl_polkadot.x3d - H3DAPIでどうシェーダを使用するかの例。 赤色の表面に白いドットがあるように見せるためGLSL言語を使用します。
  • Sound - Soundノードを用いたデモ。音は触覚デバイスの後を追います。
  • SuperShape/SuperShape.x3d - SuperShapeノードのデモ。
  • x3dmodels - このディレクトリには、X3D定義の3Dモデルを含んでいるサブディレクトリがあります。 Sceneへロードされると、触覚デバイスでそれらに触れることができます。

X3DとPythonを使用した例

  • bumpmap/bumpmap.x3d - MultiTextureノードとPythonを使用することで隆起を表現しています。 触覚学装置は光源を置くのに使用されます。
  • DeformableShape/deform.x3d - DeformableShapeノードを使用して、膜のようなオブジェクトを簡単に変形させます。変形させる形をPythonによって出力しています。
  • DynamicTransform/dynamic.x3d - 押すと均衡に戻ろうとするDynamicTransformノードの機能を示します。
  • flight/flight.x3d - 仮想世界での飛行をシンプルに表現しています。触覚デバイスが認識されていない場合は、キーボード入力となります。
  • ForceEffects/springs.x3d - SpringEffectノードのデモ。
  • manualExamples/Python/Sphere.x3d - マニュアルとしての例。マウス左ボタンが押されたら球の色を変えます。
  • manualExamples/Python/Spheres.x3d - マニュアルとしての例。 マウス左ボタンが押された時、新しい球をランダムの色で追加します。
  • Shader nodes/cg_earthshader.x3d - H3DAPIでどうシェーダを使用するかの例。 地球を照らす太陽のイミテーションとして触覚学装置を使用できるようにCG言語を使用します。
  • Shader nodes/glsl_earthshader.x3d -  H3DAPIでどうシェーダを使用するかの例。 地球を照らす太陽のイミテーションとして触覚学装置を使用できるようにGLSL言語を使用します。
  • SpaceTennis/SpaceTennis.x3d - ラケットを触覚デバイスによって制御する簡単なテニスゲーム。 ラケットがボールに当るとき、フォース・フィードバックを与えます。

C++を使用した例

  • manualExamples/C++/CMakeLists.txt--マニュアルからの例。 SphereとSpheresの形状ファイルを発生させるためにCMakeを使用します。 manualExamples/Python/Sphere.x3dとmanualExamples/Python/Spheres.x3dのC++バージョン。
  • ParticleDemo--ソースを調べるときだけ参照してください。Particle Systemsコンポーネントのデモをする不完全な例。
  • ThreadExample--H3DAPIでスレッドをセットアップすることの例。
  • H3DLoadとH3DViewerは例のあるフォルダに位置していませんが、H3DAPIを使用するプログラムの例とみなせます。

VRMLの例


H3DAPIに含まれていない例

X3DとPythonを使用した例

触覚デバイスを使ってテクスチャーをペイントする
ここでは触覚デバイスを鉛筆代わりに使ってテクスチャに色を塗る、簡単な例を紹介します。
ただし、この例では大きすぎるテクスチャを使った場合に満足な結果を得られない事が予測されますので、C++へのアプローチが必要になるかもしれません。
C++へのアプローチとしてPaintableTexture tutorialを見ておくといいでしょう。
#paintTexture.x3d

<Group>
    <Transform rotation="1 0 0 0">
      <Shape>
        <Appearance DEF="APPEARANCE" >
          <Material/>
          <SmoothSurface />
        </Appearance>
        <Rectangle2D DEF="GEOM" size="0.4 0.4" solid="FALSE" />
      </Shape>
    </Transform>
 
  <PythonScript DEF="PS" url="paintTexture.py" >
    <Appearance USE="APPEARANCE" containerField="references" />
  </PythonScript>
 
  <ROUTE fromNode="GEOM" fromField="contactTexCoord"
         toNode="PS"      toField="drawTexCoord"/>
 
</Group>

#paintTexture.py 

from H3DInterface import *
 
# make sure the proxy is drawn at the position of the haptics device
tex_channels = 1
tex_size_s = 32
tex_size_t = 32
tex_matrix = []
for i in range( tex_size_s * tex_size_t ):
  tex_matrix.append( "0xFF" )
 
appearance_node, = references.getValue()
 
string_of_values = ""
for i in tex_matrix:
  string_of_values= string_of_values + i + " "
pixelTexture =  createX3DNodeFromString( """<PixelTexture repeatS="false" repeatT="false" image=" %i %i %i %s"  />
""" % (tex_size_s, tex_size_t, tex_channels, string_of_values) )[0]
appearance_node.texture.setValue( pixelTexture )
 
class DrawTexCoord( AutoUpdate( MFVec3f ) ):
  def update( self, event ):
    event_value = event.getValue()
    for value in event_value:
      # added because 0,0,0 is sent as first event, maybe due to resize.
      if value.x == value.y == value.z == 0:
        return event_value
      s_index = int(value.x * tex_size_s)
      if s_index >= tex_size_s:
        s_index = tex_size_s - 1
      t_index = int((1 - value.y) * tex_size_t)
      if t_index >= tex_size_t:
        t_index = tex_size_t - 1
      if( tex_matrix[t_index * tex_size_t + s_index] != "0x50" ):
        tex_matrix[t_index * tex_size_t + s_index] = "0x50"
        string_of_values = ""
        for i in tex_matrix:
          string_of_values= string_of_values + i + " "
        pixelTexture =  createX3DNodeFromString( """<PixelTexture repeatS="false" repeatT="false" image=" %i %i %i %s"  />
        """ % (tex_size_s, tex_size_t, tex_channels, string_of_values) )[0]
        appearance_node.texture.setValue( pixelTexture )
    return event_value
 
drawTexCoord = DrawTexCoord()

C++を使用した例

拡張C++の例 親切なフォーラムユーザーが数々の特徴的な例を出してくれています。

拡張H3DAPI

ソースコードを見てみましょう。 X3D_prefixやH3D-prefixでクラスから継承するのは、基本クラスを表す関数の実装例です。
また、VHTKとUIノードは、H3DAPIを拡張する方法の良い例です。これらのライブラリのソースコードを見てみましょう。
ここもチェックしてください。advanced H3DAPI programming.