「H3Dの使用例」の編集履歴(バックアップ)一覧はこちら
「H3Dの使用例」(2010/11/17 (水) 22:46:39) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
#contents
*H3DAPIを使った例
**&bold(){H3DAPIに含まれて配布されている例}
H3DAPI/examplesフォルダに移動し、検索パスを入力すれば、参照することができるでしょう。
***&bold(){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へロードされると、触覚デバイスでそれらに触れることができます。
***&bold(){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 - ラケットを触覚デバイスによって制御する簡単なテニスゲーム。 ラケットがボールに当るとき、フォース・フィードバックを与えます。
***&bold(){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を使用するプログラムの例とみなせます。
***&bold(){VRMLの例}
-[[Paintable board example using SFImage in SpiderMonkey >http://www.h3dapi.org/modules/mediawiki/index.php/Paint_Board_using_SFImage]]
**H3DAPIに含まれていない例
***X3DとPythonを使用した例
****触覚デバイスを使ってテクスチャーをペイントする
ここでは触覚デバイスを鉛筆代わりに使ってテクスチャに色を塗る、簡単な例を紹介します。
ただし、この例では大きすぎるテクスチャを使った場合に満足な結果を得られない事が予測されますので、C++へのアプローチが必要になるかもしれません。
C++へのアプローチとして[[PaintableTexture tutorial > http://www.h3dapi.org/modules/mediawiki/index.php/Tutorials#PaintableTexture_.28new_texture_node.29]]を見ておくといいでしょう。
#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()
***&bold(){C++を使用した例}
[[拡張C++の例 > http://www.h3dapi.org/modules/mediawiki/index.php/H3DAPI_Examples_repository]] 親切なフォーラムユーザーが数々の特徴的な例を出してくれています。
#contents
*H3DAPIを使った例
**&bold(){H3DAPIに含まれて配布されている例}
H3DAPI/examplesフォルダに移動し、検索パスを入力すれば、参照することができるでしょう。
***&bold(){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へロードされると、触覚デバイスでそれらに触れることができます。
***&bold(){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 - ラケットを触覚デバイスによって制御する簡単なテニスゲーム。 ラケットがボールに当るとき、フォース・フィードバックを与えます。
***&bold(){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を使用するプログラムの例とみなせます。
***&bold(){VRMLの例}
-[[Paintable board example using SFImage in SpiderMonkey >http://www.h3dapi.org/modules/mediawiki/index.php/Paint_Board_using_SFImage]]
**H3DAPIに含まれていない例
***X3DとPythonを使用した例
****触覚デバイスを使ってテクスチャーをペイントする
ここでは触覚デバイスを鉛筆代わりに使ってテクスチャに色を塗る、簡単な例を紹介します。
ただし、この例では大きすぎるテクスチャを使った場合に満足な結果を得られない事が予測されますので、C++へのアプローチが必要になるかもしれません。
C++へのアプローチとして[[PaintableTexture tutorial > http://www.h3dapi.org/modules/mediawiki/index.php/Tutorials#PaintableTexture_.28new_texture_node.29]]を見ておくといいでしょう。
#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()
***&bold(){C++を使用した例}
[[拡張C++の例 > http://www.h3dapi.org/modules/mediawiki/index.php/H3DAPI_Examples_repository ]] 親切なフォーラムユーザーが数々の特徴的な例を出してくれています。
*拡張H3DAPI
ソースコードを見てみましょう。 X3D_prefixやH3D-prefixでクラスから継承するのは、基本クラスを表す関数の実装例です。
また、VHTKとUIノードは、H3DAPIを拡張する方法の良い例です。これらのライブラリのソースコードを見てみましょう。
ここもチェックしてください。[[advanced H3DAPI programming.> http://www.h3dapi.org/modules/mediawiki/index.php/Advanced_H3DAPI_programming]]