MPML-VR リファレンス Version 2.0

Last Update: 2002.3.7
Author: 岡崎直観 / 綾聡平 / 柴田智秀

概要
本文書はマルチモーダルプレゼンテーション記述言語MPML(Multimodal Presentation Markup Language)の 3次元VRML版として生まれた、MPML-VR(Multimodal Presentation Markup Language for VRML)のXML要素リファレンスです。 MPML-VRのXML要素ツリーは以下に示す図のようになっています。

目次
  1. ルート要素
    mpml MPMLドキュメントのルート要素
  2. ヘッダ要素
    head MPML-VRドキュメントのヘッダ情報
    meta メタデータ記述
    title タイトルの設定
    root-layout MPML-VRプレゼンテーションウィンドウの設定
    agent プレゼンテーションに使用するエージェントの設定
  3. ボディ要素
    body プレゼンテーションスクリプト本体の定義
    page プレゼンテーションの1ページを定義
    scene プレゼンテーションの1シーンを定義
    events シーン内に発生したイベントを受け取るハンドラの登録
    object VRMLオブジェクトの取り込み
  4. 同期要素
    seq シーケンシャルスクリプト
    par パラレルスクリプト
  5. エージェントスクリプト要素
    emotion エージェントの感情の設定
    turn エージェントの方向を変える
    move エージェントの移動
    play エージェントのアニメーション実行
    look エージェントの視線管理
    speak エージェントの発話
    emph エージェントの発話における強調
    think エージェントのつぶやき
    listen 音声認識のON/OFF
  6. シーンスクリプト要素
    call オブジェクトVRMLのメソッド呼び出し
    set-viewpoint プレゼンテーションの視点の設定
    activate-event 各イベントの有効・無効を制御
    exit コンテンツ実行終了
    label ラベルの定義
    jump 指定されたロケーションへジャンプします
  7. イベント要素
    heard ある単語・フレーズを音声認識で聞き取った時に発生するイベント
    world-proximity 視点が領域に入ることによって発生するイベント
    world-visibility ワールド内の物体の可視性によって発生するイベント
    world-touch ワールド内の物体とマウスの位置関係により発生するイベント


  1. ルート要素
  2. mpml

    MPMLドキュメントのルート要素

    属性
    version
    MPMLドキュメントのバージョン

    子要素
    head
    ヘッダ情報
    body
    プレゼンテーションドキュメント本体

    解説

    要素<mpml> は、MPMLドキュメントのルート要素です。 MPML-VRドキュメントとして宣言する場合には、 version"vr" を指定しなければなりません。 MPML-VRドキュメントの内容は、すべて 要素<mpml> の子孫要素として記述します。

    MPML-VRドキュメントは、XMLドキュメントの一種であるために、 MPML-VRファイルの先頭に以下の様な記述が必要となります。 (以下の例はencodingをたまたま"shift_jis"に設定したものであり、それを強要するものではありません。)

    <?xml version="1.0" encoding="shift_jis" ?>
    

    本文書で、MPML-VRの実装について規定しませんが、MPML-VR Viewer Ver.1.0では、 XSLTを用いてプレイヤーを実装しているため、上述のXML宣言のほかに、 XSLスタイルシートの設定を以下のように行わなければなりません。

    <?xml-stylesheet type="text/xsl" href="mpml-vr.xsl" ?>
    

    以上のようなMPML-VRのXML関連の事項については、MPML-VR Viewerの実装によって変更になる場合があります。

    サンプル
    <?xml version="1.0" encoding="shift_jis" ?>
    <?xml-stylesheet type="text/xsl" href="mpml-vr.xsl" ?>
    
    <mpml version="vr">
      <head>
        <!-- ここにヘッダ情報を記述する -->
      </head>
      <body>
        <!-- ここにプレゼンテーションドキュメントの本体を記述する -->
      </body>
    </mpml>
    


  3. ヘッダ要素
  4. head

    MPML-VRドキュメントのヘッダ情報

    属性はありません。

    子要素
    meta
    メタデータ定義
    title
    プレゼンテーションのタイトル
    root-layout
    MPML-VRプレゼンテーションウィンドウの設定
    agent
    エージェントキャラクタの設定

    解説

    要素<head> は、3次元プレゼンテーションに関するヘッダ情報を格納するための要素です。 要素<head> には、MPML-VRドキュメント全体に関する補助情報を記述します。

    meta

    メタデータ記述

    属性
    name
    定義したい情報名
    content
    情報の内容

    空要素です。

    解説

    要素<meta> には、3次元プレゼンテーションのタイトルや著作権情報などの様々なプロパティを記載することができます。 要素<meta> には、それぞれ1組ずつの「プロパティ名」と「その値」を namecontent として記述します。 namecontent は必ず組で存在しなければなりません。

    name の属性値についてMPML-VRでは規定しませんが、 MPML Ver.2.0eでも採用されている以下の値を推奨します。

    属性値 属性値の解説 内容の例
    titl プレゼンテーションの日本語タイトル MPML-VRについて
    tite プレゼンテーションの英語タイトル Abount MPML-VR
    aupk プレゼンテーションの著者の日本語名 岡崎 直観
    aupe プレゼンテーションの著者の英語名 Naoaki Okazaki
    conf 発表会議名 情報処理学会第57回全国大会
    cond 発表の行われた日 20010315
    host 発表学会 情報処理学会
    kywd 日本語キーワード VR-MPML エージェント VRML
    kywe 英語キーワード VR-MPML agent VRML
    writer スクリプトの著者 N.Okazaki
    wrid スクリプトの書かれた日 20010214
    pred プレゼンテーションの行われた日 20010315
    vafd プレゼンテーションの有効期限 (from) 20010315
    vatd プレゼンテーションの有効期限 (to) 20000315

    サンプル
      <head>
        <meta name="titl" content="3次元プレゼンテーション言語MPML-VR" />
        <meta name="aupe" content="N.Okazaki" />
        <meta name="wrid" content="20010214" />
      </head>
    

    title

    タイトルの設定

    属性はありません。

    パース済みテキストデータ
    タイトルを示す文字列

    解説

    要素<title> は、MPML-VRプレゼンテーションのタイトルを定義します。

    サンプル
      <head>
        <title> MPML-VR Ver.1.0について </title>
      </head>
    

    root-layout

    MPML-VRプレゼンテーションウィンドウの設定

    属性
    top
    プレゼンテーションウィンドウの左上x座標
    left
    プレゼンテーションウィンドウの左上y座標
    width
    プレゼンテーションウィンドウの幅
    height
    プレゼンテーションウィンドウの高さ

    空要素です。

    解説

    要素<root-layout> は、MPML-VRプレゼンテーションウィンドウの配置を設定します。 プレゼンテーションウィンドウは、 ( left , top )を左上の座標とし、、 width , height のサイズを持つものとなります。

    デフォルトでは、プレゼンテーションウィンドウの大きさが最大になるように配置されます。

    サンプル
      <head>
        <root-layout width="80%" height="80%" />
      </head>
    

    agent

    プレゼンテーションに使用するエージェントの設定

    属性
    id
    エージェントのID
    profile-url
    エージェントプロフィールが置いてあるURL
    location
    エージェントの初期出現位置

    空要素です。

    解説

    要素<agent> は、MPML-VRプレゼンテーションに使用するエージェントを設定します。

    MPML-VRではプレゼンテーションに現れるエージェントすべてに名前を付けて管理することによって、 プレゼンテーションエージェントを複数存在させた場合でもそれぞれを区別できるようにしています。

    要素<agent> は、 id という名前のエージェントを宣言し、 その実体として profile-url というURLに置いてあるエージェントプロフィールを利用するように MPML-VR Viewerに指示します。

    要素<agent> ではさらに、プレゼンテーションワールドVRMLの中へエージェントを取り込む際、 ワールドVRML中の location で示されるノードの位置へエージェントを出現さるように MPML-VR Viewerに指示します。

    profile-url で指定するエージェントプロフィールでは、エージェントVRMLファイル名、 音声出力のパラメータ、移動時の時間などのエージェント固有の設定をXMLドキュメントとしてまとめて記述することができます。 これにより、各エージェントに特徴を持たせることができます。 このエージェントプロフィールファイルの詳細については、エージェントプロフィール仕様書を参照してください。

    サンプル
      <head>
        <agent id="Agent" profile-url="andy.ap" location="StartPosition" />
      </head>
    


  5. ボディ要素
  6. body

    プレゼンテーションスクリプト本体の定義

    属性はありません。

    子要素
    page
    プレゼンテーションのページ定義

    解説

    要素<body> は <page> 以下で記述されるプレゼンテーションスクリプトを実行します。 <page> の中で最初に実行されるのは、 要素<body> 以下で最初に現れる <page> です。

    page

    プレゼンテーションの1ページを定義

    属性
    id
    ページのID
    caption
    ページのタイトル
    world-url
    ワールドVRMLファイルのURL

    子要素
    scene
    プレゼンテーションシーンの定義

    解説

    要素<page> は、 world-url で指定されるワールドVRMLファイルを使用し、 id というラベルで、MPML-VRプレゼンテーションのひとつのページを定義します。 MPML-VRのプレゼンテーションの1ページは、 world-url で指定されるワールドVRMLが変更されないものと定義されます。

    caption には、ページのタイトルを指定します。 MPML-VRのプレイヤーは、この属性値を使ってプレゼンテーションの目次を構成することができます。

    要素<page> の子要素として、 <scene> を任意の個数定義することによって、 ひとつのページの中に、シーンと呼ばれるブロックを定義することができます。 MPML-VRのプレゼンテーションスクリプトは、必ず <scene> の中に記述します。

    サンプル
      <body>
        <!-- Page1 -->
        <page id="Page1" caption="ページ1" world-url="http://hoge/world01.wrl">
          <scene id="Scene1" caption="シーン1">
            <!-- Scene1の内容 -->
          </scene>
          ...
        </page>
    
        <!-- Page2 -->
        <page id="Page2" caption="ページ1" world-url="http://hoge/world02.wrl">
          <scene id="Scene1" caption="シーン1">
            <!-- Scene1の内容 -->
          </scene>
        </page>
        ...
      </body>
    

    scene

    プレゼンテーションの1シーンを定義

    属性
    id
    シーンスクリプトのID
    caption
    シーンのタイトル

    子要素
    events
    シーン内のイベントハンドラ
    seq
    シーンスクリプトの内容

    解説

    要素<scene> は、その子要素をひとまとめにして id という名前の1シーンを定義します。 シーンとは、以下の2つの要素を持つものとします。

    1. イベントハンドラ (events要素で定義)
    2. シーンスクリプト (seq要素で定義)

    イベントハンドラでは、シーン内で起こる様々なイベントに対する処理を記述します。 例えば、 <vrml-touch> を使って、

    <scene>
      <events>
        <vrml-touch id="Event1" location="Picture1" jump-to="Scene03" />
      </events>
      <seq>
        ...
      </seq>
    </scene>
    

    と記述すると、シーンスクリプト実行中にユーザーが、 "Picture1"というVRMLノードをマウスでクリックすることにより、 実行中のシーンスクリプトを中断し、"Scene03"へジャンプするということを実現できます。

    イベントハンドラは、シーンごとに独立して管理されます。あるシーンのイベントハンドラが有効となるのは、 直下の子孫要素として記述されているシーンスクリプトを実行中の場合だけです。

    シーンスクリプトとは、そのシーンにおいて実行されるプレゼンテーションの内容を記したもので、 必ず、 <seq> の中に記述します。 MPML-VR Viewerは、 <seq> の子要素を順に実行していき、 最後の要素の実行が終わると、待機状態になります。 待機状態は、何らかのイベントが発生するまで続くので、 「ユーザーの指示待ち」として使うことができます。 待機状態に陥らせずに別のシーンスクリプトの実行を始めたい場合は、 <jump> を使います。

    caption で示されるシーンのタイトルをつけることができます。

    サンプル
      <body>
        <!-- Page1 (無限ループ) -->
        <page id="Page1" world-url="http://hoge/sample/world01.wrl">
          <scene id="Scene1">
            <!-- Scene1の内容 -->
            <seq>
              <jump to="Scene2" />
            </seq>
          </scene>
    
          <scene id="Scene2">
            <!-- Scene2の内容 -->
            <seq>
              <jump to="Scene1" />
            </seq>
          </scene>
        </page>
      </body>
    

    events

    シーン内に発生したイベントを受け取るハンドラの登録

    属性はありません。

    子要素
    シーンスクリプト要素
    シーケンシャルに実行したい内容

    解説

    要素<events> の子要素として各種イベントに対する処理を登録できます。 要素<events> の子要素として定義したイベントのうち、どれか1つでも発生すると、 現在実行中のシーンスクリプトの実行は中断され、ハンドラの指示に従います。

    サンプル
      <!-- 音声入力によるジャンプの例 -->
      <body>
        <page id="Page1" world-url="http://hoge/sample/world01.wrl">
          <scene id="Scene1">
            <events>
              <!-- 音声入力から'Next'という単語を認識したときに
                   Scene2を実行するように設定します -->
              <heard id="event1" agent="Agent" voice="Next" jump-to="Scene2" />
            </events>
            <seq>
              <!-- 音声入力をアクティブにします -->
              <listen agent="Agent" />
            </seq>
          </scene>
    
          <scene id="Scene2">
            <seq>
              <!-- 'Next'という単語を認識したときの処理 -->
              ...
            </seq>
          </scene>
        </page>
      </body>
    

    object

    VRMLオブジェクトの取り込み

    属性
    id
    オブジェクトID
    url
    VRMLオブジェクトプロフィールのURL
    location
    オブジェクトを出現させる場所

    空要素です。

    解説

    要素<object> は url で指定されたオブジェクトプロフィールの設定を もとに、現在のシーンの中にVRMLオブジェクトを取り込み、 id で 指定されるIDを割り当てます。 このとき、オブジェクト取り込み位置を location で指定できます。

    要素<object> で取り込まれた要素は、 <call> を用いて制御することが できます。

    サンプル
      <scene id="Scene1">
        <!-- TVの取り込み -->
        <object
          id="TV"
          url="http://hoge/samples/parts/Television.xml"
          location="PosTV"
        />
      </scene>
    


  7. 同期要素
  8. seq

    シーケンシャルスクリプト

    属性
    begin
    シーケンシャル実行の猶予時間

    子要素
    par
    パラレル実行要素
    シーンスクリプト要素
    シーケンシャルに実行したい内容

    解説

    要素<seq> の子要素は、そのテキスト内に現れる順番に従って実行されます。

    要素<seq> は、動作の実行猶予をサポートしており、 実際にシーケンシャル実行が開始されるのは begin [ms]後です。

    サンプル
      <!-- <seq>の子要素は出現順に実行されます -->
      <seq>
        <play agent="Agent" act="greet" />
        <speak agent="Agent"> Please say 'Left' or 'Right'. </speak>
        <listen agent="Agent" />
      </seq>
    

    par

    パラレルスクリプト

    属性
    begin
    パラレル実行の猶予時間

    子要素
    seq
    シーケンシャル実行要素
    イベント要素
    イベントとして登録したい内容

    解説

    要素<par> の子要素は、そのテキスト内に現れる順序に関わらず、すべて並行して実行されます。 すべての子要素の実行が終了した時点で、 要素<par> の実行は終了したと見なされます。 子要素として <seq> を含ませ、複数の要素のシーケンシャル実行を ひとつのスレッドとして見立てることもできます。

    要素<par> は文法上、複数のアニメーション動作を同時に行わせたり、 複数のテキストを同時にしゃべらせることが可能となりますが、 そのような動作を行わせた場合の結果は保証されません。

    要素<par> は、動作の実行猶予をサポートしており、 実際にパラレル実行が開始されるのは begin [ms]後です。

    サンプル
      <seq>
        <!-- しゃべりながら歩いてお辞儀をする -->
        <par>
          <seq>
            <move agent="Agent" how="walk" location="Center" />
            <play agent="Agent" act="greet" />
          </seq>
          <speak agent="Agent">Welcome to the MPML-VR. </speak>
        </par>
        <!-- <seq>と<speak>の実行が終わったらここに実行が移ります -->
        ...
      </seq>
    


  9. エージェントスクリプト要素
  10. emotion

    エージェントの感情の設定

    属性
    agent
    感情を変化させるエージェントキャラクタID
    type
    感情のタイプを定める
    begin
    実行猶予時間

    子要素
    par
    パラレル実行要素
    エージェントスクリプト要素
    エージェントの感情を変化させたい内容
    シーンスクリプト要素
    制御には影響を与えません

    解説

    要素<emotion> は agent で示されるエージェントキャラクタの感情を type に設定します。

    要素<emotion> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。 尚、 要素<emotion> を <par> の子要素として用いた場合の結果は保証されません。

    サンプル
      <seq>
        <!-- エージェントの感情を"sad"にします -->
        <emotion agent="Agent" type="sad"> 
          <speak agent="Agent"> I'm sorry. </speak>
        </emotion>
        <!-- 顔の表情を変えずに0.5秒後に感情を"angry"にします -->
        <emotion agent="Agent" type="angry" begin="500">
          <think agent="Agent"> How rude! </think>
        </emotion>
      </seq>
    

    turn

    エージェントの方向を変える

    属性
    agent
    方向を変えるエージェントのID
    begin
    実行猶予時間
    location
    回転する方向にあるVRMLノード
    speed
    移動時間の係数

    解説

    要素<turn> は agent で示されるエージェントを location の方向に回転させます。 回転に要する時間は、エージェントプロフィールの設定や、 移動距離などから自動的に算出されますが、 speed にて移動時間を スケーリングすることができます。 この場合、各々の手順にかける時間は speed 倍されます。

    要素<turn> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。

    サンプル
      <seq>
        <!-- Agentを0.5秒後にRightの方向に向かせます -->
        <turn agent="Agent" location="Right" begin="500" />
      </seq>
    

    move

    エージェントの移動

    属性
    agent
    移動をさせるエージェントのID
    begin
    移動動作の実行猶予時間
    how
    移動時のアニメーション
    location
    移動先のVRMLノード
    speed
    移動時間の係数

    解説

    要素<move> は agent で示されるエージェントを移動させます。

    MPML-VRにおけるエージェントの移動は以下のような手順の連続として実行されます。

    1. エージェントを移動先の方向へ回転
    2. エージェントを移動先へ平行移動
    3. エージェントを任意の方向へ回転

    まず、エージェントを移動先 location の方向へ振り向かせます。 このときの回転角度は、エージェントの現在位置と location で示されるVRM-Translationノードのtranslationフィールド位置をもとに 自動的に計算されます。 回転の実装は、VRMLのRotationInterpolatorノードによって行われます。

    次に、キャラクタエージェントを移動先まで平行移動させます。 これにより、キャラクタエージェントの座標が変更されます。 平行移動の実装は、VRMLのPositionInterpolatorノードによって行われるとともに、 平行移動時は、 how で示されるアニメーションを同時実行させることができます。 how で平行移動時のアニメーションを追加することにより、 エージェントが歩いたり、走ったりするのを表現することができます。

    最後に、キャラクタエージェントを向かせたい方向へ回転させます。 エージェントの向きは、 location で示されるVRMLノードのRotation子ノードの回転になります。 最初の回転と同様、この回転の実装もVRMLのRotationInterpolatorノードによって行われます。

    以上の3動作の連結により、エージェントの移動が表現されます。

    上記の回転・平行移動に要する時間は、エージェントプロフィールの設定や、 移動距離などから自動的に算出されますが、 speed にて移動時間を スケーリングすることができます。 この場合、各々の手順にかける時間は speed 倍されます。

    要素<move> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。

    サンプル
      <seq>
        <!-- AgentをCenterへ歩かせます -->
        <move agent="Agent" how="walk" location="center" />
      </seq>
    

    play

    エージェントのアニメーション実行

    属性
    agent
    動作を実行させるエージェントキャラクタID
    act
    動作名
    begin
    動作の実行猶予時間

    空要素です。

    解説

    要素<play> は agent で示されるエージェントキャラクタに act の動作を実行させます。 <par> ノードを用いてエージェントキャラクタに2つ以上の動作を実行させたときの結果は保証されません。

    要素<play> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。

    サンプル
      <seq>
        <!-- Agentにお辞儀(greet)をさせます -->
        <play agent="Agent" act="greet" />
        <!-- 1秒後にAgentに手を叩かせます -->
        <play agent="Agent" act="applaud" begin="1000" />
      </seq>
    

    look

    エージェントの視線管理

    属性
    agent
    視線を変化させるエージェントキャラクタID
    begin
    実行猶予時間
    direction
    視線の方向

    空要素です。

    解説

    要素<look> は agent で示されるエージェントキャラクタの目線を direction で示された方向にします。 要素<look> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。

    サンプル
      <seq>
        <!-- キャラクタの視線を右に向けます -->
        <look agent="Agent" direction="right" />
      </seq>
    

    speak

    エージェントの発話

    属性
    agent
    発話を実行させるエージェントキャラクタID
    begin
    実行猶予時間

    パース済みテキストデータ
    発話の内容

    子要素
    emp
    強調するフレーズ

    解説

    要素<speak> は agent で示されるエージェントキャラクタに PCDATAで示された内容を喋らせます。 要素<speak> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。

    サンプル
      <seq>
        <!-- テキストデータとして喋らせたい内容を記述します -->
        <speak agent="Agent"> Hello, MPML-VR World. </speak>
        <!-- 0.5秒後に喋らせます -->
        <speak agent="Agent" begin="500"> My name is Agent??? </speak>
      </seq>
    

    emph

    エージェントの発話における強調

    属性
    begin
    実行猶予時間
    strength
    強調動作の大きさを"strong","neutral","gentle"で指定する
    flag
    動作のon/off

    パース済みテキストデータ
    強調するフレーズ

    解説

    要素<emph> は <speak> の子要素で、PCDATAで示された内容を強調します。 flag によって強調動作の有無を、 strength によって強調動作の大きさを指定することができます。 <par> ノードを用いて <play> と並列に実行させたときの結果は保証されません。 また、 flag がoffに設定された場合、 strength の設定は反映されません。

    要素<emph> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。

    サンプル
      <seq>
        <!-- "MPML-VR"というフレーズを強調します -->
        <speak agent="Agent"> Hello, <emph>MPML-VR</emph> World. </speak>
        <!-- 動作を伴わない強調 -->
        <speak agent="Agent"> My name is <emph flag="off">Agent</emph>??? </speak>
      </seq>
    

    think

    エージェントのつぶやき

    属性
    agent
    実行させるエージェントキャラクタID
    begin
    実行猶予時間

    パース済みテキストデータ
    つぶやき(思考)内容

    解説

    要素<think> は agent で示されるエージェントキャラクタに PCDATAで示された内容をつぶやかせます。 この場合、吹き出しの中につぶやきの内容が表示されますが、音声としては出力されません。 要素<think> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。

    サンプル
      <seq>
        <!-- テキストデータとして喋らせたい内容を記述します -->
        <think agent="Agent"> I'm OK? </speak>
      </seq>
    

    listen

    音声認識のON/OFF

    属性
    agent
    エージェントキャラクタID
    begin
    実行猶予時間
    flag
    音声認識を開始するときは"True"、終了するときは"False"

    空要素です。

    解説

    要素<listen> は agent で示されるエージェントキャラクタの 音声認識処理を開始/終了します。 <flag> が"True"の場合は音声認識を開始、"False"の時は音声認識を終了します。 要素<listen> は、動作の実行猶予をサポートしており、実際に動作が発生するのは begin [ms]後です。

    サンプル
      <seq>
        <label id="LeftRightListen" />
        <speak agent="Agent"> Please say 'left' or 'right'. </speak>
        <!-- 音声認識を有効にします -->
        <listen agent="Agent" flag="True" />
        <!-- 10秒後に音声認識を無効にします -->
        <listen agent="Agent" flag="False" begin="10000" />
        <!-- もう一度メッセージを表示させます -->
        <jump to="LeftRightListen" />
      </seq>
    


  11. シーンスクリプト要素
  12. call

    オブジェクトVRMLのメソッド呼び出し

    属性
    object
    オブジェクトID
    method
    メソッド名
    value
    メソッドに渡すパラメータ
    begin
    メソッド呼び出しの実行猶予時間

    空要素です。

    解説

    要素<call> は、 object というIDを持つVRMLオブジェクトの method というメソッドを呼び出し、 value というパラメータを渡します。

    メソッド呼び出しは、 object のプロフィールの、 method要素を参照し、その記述に従った オブジェクトプロフィールは、メソッド名、呼び出しの型情報、 非同期/同期を設定することができ、 要素<call> はその情報に従ってメソッド呼び出しを行います。

    要素<call> は、動作の実行猶予をサポートしており、実際にメソッド呼び出しが発生するのは begin [ms]後です。

    サンプル
      <!-- object="TV"のオブジェクトプロフィールの内容 --
        <vrml-object
          url="file://hoge/Parts/television.wrl"
          node="dad_Group1">
          <call>
            <method id="url" type="MFString"
              node="Movie1" field="url"
            />
            <method id="start" type="SFTime"
              node="Script_Television" field="startAt0"
              sync-node="Script_Television" sync-field="triggerStop"
            />
          </call>
        </vrml-object>
      -->
      <seq>
        <!-- "url"というメソッドは非同期で呼び出されます -->
        <call object="TV" method-name="url" value="http://hoge/Parts/sample.mpg" />
        <!-- "start"というメソッドは同期で呼び出されます -->
        <call object="TV" method-name="start" value="1" />
      </seq>
    

    set-viewpoint

    プレゼンテーションの視点の設定

    属性
    location
    プレゼンテーションの視点
    transition
    トランジッションの有無
    begin
    実行猶予時間

    解説

    プレゼンテーションの視点を location で示されるVRML-Viewpointノードへ移動させます。 transition が"True"に設定されている場合は、視点移動を実行するときに、 location へ滑らかに移動させます。

    サンプル
      <!-- カメラの位置をCameraCenterへ移動させます -->
      <set-viewpoint location="CameraCenter" />
    

    activate-event

    各イベントの有効・無効を制御

    属性
    event
    イベントのID
    flag
    有効にする場合は"True", 無効にする場合は"False"
    begin
    実行猶予期間

    空要素です。

    解説

    要素<activate-event> は、 event という名前のイベントの有効・無効を設定します。 <events> の子要素として定義されているイベントハンドラは、有効の場合にのみ動作します。 たとえ、該当するイベントが発生したとしても、 イベントハンドラが無効に設定されている場合は、イベント処理は行われません。

    これにより、エージェントのプレゼンテーションが完了するまでユーザー入力を受け付けない等の 制御を行うことができます。

    要素<activate-event> は、動作の実行猶予をサポートしており、実際に設定が行われるのは begin [ms]後です。

    サンプル
      <scene>
        <events>
          <!-- "exJump"は「初期状態 = 無効」として登録します -->
          <vrml-touch id="evJump" node="Arrow" jump-url="http://hoge/" active="false" />
        </events>
        <seq>
          <!-- 以降に書くプレゼンテーションに"evExit"が割り込むことはありません -->
          ...
          <speak agent="Agent">Now, please touch the arrow in the screen.</speak>
          <activate-event event="exJump" flag="True" />
          <!-- 以降、"evExit"による割り込みは許可されます -->
        </seq>
      </scene>
    

    exit

    コンテンツ実行終了

    属性はありません。

    空要素です。

    解説

    要素<exit> はコンテンツの実行を終了します。

    サンプル
      <seq>
        <!-- 処理を終了します。 -->
        <exit/>
      </seq>
    

    label

    ラベルの定義

    属性
    id
    ラベルのID

    空要素です。

    解説

    要素<label> は <jump> の飛び先を定義します。

    サンプル
      <seq>
        <!-- 本当にすみません!? -->
        <label id="Loop" />
        <play agent="Agent" act="greet" >
        <jump to="Loop" />
      </seq>
    

    jump

    指定されたロケーションへジャンプします

    属性
    to
    飛び先ラベルのID
    url
    リロードするURL

    空要素です。

    解説

    要素<jump> は to もしくは、 url のどちらか一方を記述して使用します。

    to を記述した場合は、そのラベルの場所へ実行を移します。 <label> で定義されたラベルだけでなく、 <scene> の id 属性もラベルとしての性質を持つので、 要素<jump> の飛び先として使用することができます。

    url を記述した場合は、そのURLのドキュメントを開きます。 url のドキュメントの種類は、ブラウザで開けるものであれば問いません。 これにより、現在のMPML-VRドキュメント外へのハイパーリンクを実現できます。 もちろん、ジャンプ先URLがMPML-VRドキュメントでも構いません。

    サンプル
      <scene id="Scene1">
        <seq>
          <!-- Scene2へジャンプします -->
          <jump to="Scene2" />
        </seq>
      </scene>
      <scene id="Scene2">
        <seq>
          <!-- "http://www.miv.t.u-tokyo.ac.jp/"をブラウザで開きます -->
          <jump url="http://www.miv.t.u-tokyo.ac.jp/" />
        </seq>
      </scene>
    


  13. イベント要素
  14. heard

    ある単語・フレーズを音声認識で聞き取った時に発生するイベント

    属性
    id
    イベントID
    agent
    音声認識を実行させるエージェントID
    caption
    見出し
    voice
    聞き取る単語・フレーズ
    jump-to
    イベントが発生したときのジャンプ先ラベル
    jump-url
    イベントが発生したときのジャンプ先URL
    active
    イベントの初期状態 ("True"なら有効、"False"なら無効)

    空要素です。

    解説

    要素<heard> は、 agent というエージェントが voice で 指定される単語・フレーズを聞き取ったときに、イベントを発生させます。

    イベントのIDは id で指定し、イベントの初期状態は active になります。 イベントが発生したときの処理として、ラベル jump-to へのジャンプ、 もしくはURL jump-url で示されるドキュメントを開く、のどちらかが実行されます。 jump-tojump-url はどちらか一方のみ記述できます。

    caption は、このイベントに結び付けられている見出しで、 MPML-VRプレイヤーによっては、プレゼンテーションウィンドウ内に表示される場合があります。

    サンプル
      <events>
        <!-- 音声入力から'Next'という単語を認識したときに
           SceneNextを実行するように設定します -->
        <heard id="event1" agent="Agent" voice="Next" jump-to="SceneNext" />
      </events>
    

    world-proximity

    視点が領域に入ることによって発生するイベント

    属性
    id
    イベントID
    caption
    見出し
    center
    センサー領域となる境界箱の中心点
    size
    センサー領域となる境界箱のサイズ
    continuous
    イベントを連続して発生させるか ("True" or "False")
    jump-to
    イベントが発生したときのジャンプ先ラベル
    jump-url
    イベントが発生したときのジャンプ先URL
    active
    イベントの初期状態 ("True"なら有効、"False"なら無効)

    空要素です。

    解説

    要素<world-proximity> は、 centersize で指定されるワールド内の領域に、 ユーザーが入っているとき、イベントを発生させます。

    イベントのIDは id で指定し、イベントの初期状態は active になります。 イベントが発生したときの処理として、ラベル jump-to へのジャンプ、 もしくはURL jump-url で示されるドキュメントを開く、のどちらかが実行されます。 jump-tojump-url はどちらか一方のみ記述できます。

    continuous が"True"の時は、イベント発生事象が解除されない限り、同じイベントを連続して何回も発生させます。 continuous が"False"の時は、イベントが1回発生すると、イベント発生事象がいったん解除されない限り、 続けてイベントが発生することはありません。 デフォルトでは continuous = "False"となっています。

    サンプル
      <events>
        <!-- 
          中心座標(0, 0, 0)、サイズ(5, 5, 5)の境界箱の中にユーザーが
          入ったときに、SceneNextを実行します。
        -->
        <world-proximity id="event1" center="(0, 0, 0)" size="(5, 5, 5)" jump-to="SceneNext" />
      </events>
    

    world-visibility

    ワールド内の物体の可視性によって発生するイベント

    属性
    id
    イベントID
    caption
    見出し
    location
    対象とするワールド内物体
    continuous
    イベントを連続して発生させるか ("True" or "False")
    jump-to
    イベントが発生したときのジャンプ先ラベル
    jump-url
    イベントが発生したときのジャンプ先URL
    active
    イベントの初期状態 ("True"なら有効、"False"なら無効)

    空要素です。

    解説

    要素<world-visibility> は、 location で指定されるワールド内の物体が、 プレイヤーウィンドウの視界の中にあるとき、イベントを発生させます。

    イベントのIDは id で指定し、イベントの初期状態は active になります。 イベントが発生したときの処理として、ラベル jump-to へのジャンプ、 もしくはURL jump-url で示されるドキュメントを開く、のどちらかが実行されます。 jump-tojump-url はどちらか一方のみ記述できます。

    continuous が"True"の時は、イベント発生事象が解除されない限り、同じイベントを連続して何回も発生させます。 continuous が"False"の時は、イベントが1回発生すると、イベント発生事象がいったん解除されない限り、 続けてイベントが発生することはありません。 デフォルトでは continuous = "False"となっています。

    caption は、このイベントに結び付けられている見出しで、 MPML-VRプレイヤーによっては、プレゼンテーションウィンドウ内に表示される場合があります。

    サンプル
      <events>
        <!-- 
          "Box01"がユーザーの視点に入ったとき、SceneNextを実行します。
        -->
        <world-visibility id="event1" location="Box01" jump-to="SceneNext" />
      </events>
    

    world-touch

    ワールド内の物体とマウスの位置関係により発生するイベント

    属性
    id
    イベントID
    caption
    見出し
    type
    発生させるイベントの種類 ("Click" or "Touch" or "Over")
    location
    対象とするワールド内物体
    jump-to
    イベントが発生したときのジャンプ先ラベル
    jump-url
    イベントが発生したときのジャンプ先URL
    active
    イベントの初期状態 ("True"なら有効、"False"なら無効)

    空要素です。

    解説

    要素<world-touch> は、 location で指定されるワールド内の物体と、 マウスの位置の間に type の関係が発生することによって、イベントを発生させます。

    イベントのIDは id で指定し、イベントの初期状態は active になります。 イベントが発生したときの処理として、ラベル jump-to へのジャンプ、 もしくはURL jump-url で示されるドキュメントを開く、のどちらかが実行されます。 jump-tojump-url はどちらか一方のみ記述できます。

    type には、以下の値が指定できます。

    typeの値 説明
    Click マウスがワールド内物体の上でクリックされたときにイベントを発生させます。
    Touch マウスのボタンがワールド内物体の上で押下されたときにイベントを発生させます。
    Over マウスがワールド内物体の上に存在するときにイベントを発生させます。

    caption は、このイベントに結び付けられている見出しで、 MPML-VRプレイヤーによっては、プレゼンテーションウィンドウ内に表示される場合があります。

    サンプル
      <events>
        <!-- 
          "Box01"がユーザーがクリックしたときに、SceneNextを実行します。
        -->
        <world-touch id="event1" type="Click" location="Box01" jump-to="SceneNext" />
      </events>