# VRML2.0におけるSonyの拡張

## 新しく追加されたノード

## Sony_BindSharedNode

マルチユーザ機能の提供の為に新たに追加。以下の目的に使用する。

- クライアント間で共有する3Dオブジェクトを生成し、
- リモートから呼ばれるeventInのScriptノードと3Dオブジェクトを結び付ける

このノードのPrototype定義は次のようになる。

        PROTO Sony_BindSharedNode [
            field SFNode transformNode NULL
            field SFNode scriptNode NULL
        ] { }

このノードは、Community Place以外のVRML2.0ブラウザが無事このノードを無視 出来るよう、何も拡張されないように定義されている。

Community Placeブラウザでは、このノードは特別な扱いを受けている。 このノードのtransformNodeフィールドを指すtransformノードは、クライアント間で 共有できるように作られる。 言い換えると、このフィールドで指されていないノードは共有されない、となる。 TransformNodeフィールドは指される必要が有り、その値は必ずTransformノード でなくてはならない。

scriptNodeフィールドの値がNULLでない場合、その値はScriptノードでなくては ならない。ScriptノードのeventInはリモートから呼ぶことができる。 第１引数にtransformNodeフィールドの中で示されるTransformノードとなる対象を、 第２引数にScriptノード中に現れるEventIn名となるeventIn名を、それぞれ指す ことで、sendApplSpecific()やsendApplSpecificWithDist()といったJavaのAPIを 使うことができる。

これらのAPIの３番目の引数は、ScriptノードのeventInの値になるであろう文字列値 である。eventInはこれらのAPIの使用にあたって値を受ける為にSFString型でなくて はならない。

例として、次のようになる。

    PROTO Sony_BindSharedNode [
      field SFNode transformNode NULL
      field SFNode scriptNode NULL
    ] { }

    DEF T1 Transform { ... }
    DEF S1 Script {
      eventIn SFString IN1
      eventIn SFString IN2
      ...
    }

    Sony_BindSharedNode { transformNode USE T1 scriptNode USE S1 }

## Sony_Appearance

元のAppearanceノードに、次の２つの新しいフィールドを追加することで拡張して いる。

- backface: Shapeを表すポリゴンが背面を持つか否かを示す。
- description: Shapeに張り付けられるコメント。Community Placeブラウザ では、Shapeにマウスカーソルを入れることで、このコメントを見ることができる。

定義は次のようになる。

        PROTO Sony_Appearance [
    	field        SFBool   backface         FALSE
    	exposedField SFString description      ""
    	exposedField SFNode   material         NULL
    	exposedField SFNode   texture          NULL
    	exposedField SFNode   textureTransform NULL
        ] {
    	Appearance {
    	    material IS material
    	    texture IS texture
    	    textureTransform IS textureTransform
    	}
        }

## Sony_WorldInfo

ワールドに関するCommunity Placeブラウザ独自の属性を記述する。 このノードのPrototype定義は次のようになる。

    PROTO Sony_WorldInfo [
      field        MFString archive              []
      field        SFInt32  armLength            -1
      field        SFBool   avatarRoom           FALSE
      field        SFInt32  backgroundImageType   0
      field        SFString cpBureau             ""
      field        SFString cpBureauWLS          ""
      field        SFBool   collisionSound       TRUE
      field        SFBool   collisionDisplay     TRUE
      exposedField SFBool   turnButtonAvailable  TRUE
      exposedField SFBool   floatButtonAvailable TRUE
      exposedField SFBool   homeButtonAvailable  TRUE
      field        SFInt32  soundDeviceRate      22050
      field        SFInt32  soundDeviceBits      8
    ]{}

### archive

現在のVRMLファイル中で使われているファイルを含むアーカイブを指す。 これらのファイルは、解凍され、このVRMLファイルの置かれた場所からの相対パスで 参照できるよう、適当なローカルディレクトリに置かれる。 この方法は、コンテンツのロード中の接続を不要とする。 他のブラウザとの互換性の為、これらのファイルは適当なリモートディレクトリに 置かれるべきである。

アーカイブ自身は、LHAを用いて生成し、VRMLファイルと同じディレクトリに 置くべきである。

例）

    Sony_WorldInfo {
      archive ["foo.lzh"]
    }

### armLength

ワールド中で、あなたの(仮想)腕がどの位の長さを持っているかを示す。 この変数は、その位置であるオブジェクトに触れられるか否かを決める。 （単位はメートル）-1を指定するとどんな遠くのオブジェクトも 触ることが出来る。

例）

    Sony_WorldInfo {
      armLength 5
    }

### avatarRoom

ワールドにアバタルーム（アバタの色を変える）が提供されている場合、この変数を 指定する。TRUEかFALSEのみ指定できる。 TRUEの場合はavtroom.wrlという名前のファイルをVRMLファイルと同じディレクトリ に置くべきである。 avtroom.wrlには、アバタの色を変える機能を供給することが要求される。

例）

    Sony_WorldInfo {
      avatarRoom TRUE
    }

### backgroundImageType

ワールドの背景のイメージ形式を指定する。 指定できるのは以下の値。

0
  VRML2.0仕様通りのbackground texture
1
  front-URLテクスチャが水平方向、垂直方向に張られ、 ナビゲーションによってそのテクスチャは移動しない。
2
  front-URLテクスチャが水平方向に張られ、ナビゲーションによって そのテクスチャは移動する。

例）

    Sony_WorldInfo {
      backgroundImageType 0
    }

### cpBureau

そのワールドのビューローのアドレス、ポート番号を指す。

例）

    Sony_WorldInfo {
       cpBureau "vsserver.foo.com:5000"
    }
    or
    Sony_WorldInfo {
       cpBureau "12.23.34.45:5000"
    }

### cpBureauWLS

そのワールドのワールドロケーションサーバのアドレス、ポート番号を指す。 この変数を使う場合、WorldInfo中にtitleを記述しておかなくてはならない。

例）

    Sony_WorldInfo {
      cpBureauWLS "vsserver.foo.com:6000"
    }
    or
    Sony_WorldInfo {
      cpBureauWLS "12.23.34.45:6000"
    }

### collisionSound

そのワールドで壁等にぶつかった場合に、音を出すかどうかを指定する。 TRUEで音を出す。

例）

    Sony_WorldInfo {
      collisionSound FALSE
    }

### collisionDisplay

そのワールドで壁等にぶつかった場合に、ブラウザに赤い枠を表示するかどうかを 指定する。TRUEで表示する。

例）

    Sony_WorldInfo {
      collisionDisplay FALSE
    }

### turnButtonAvailable、floatButtonAvailable、homeButtonAvailable

ブラウザのターンボタン、フロートボタン、ホームボタンをそれぞれ 有効にするかどうかを指定する。TRUEで有効。

例）

    Sony_WorldInfo {
      turnButtonAvailable  FALSE
      floatButtonAvailable FALSE
      homeButtonAvailable  FALSE
    }

### soundDeviceRate、soundeDeviceBits

ブラウザがオープンするサウンドデバイスのパラメータを指定する。

例)

    Sony_WorldInfo {
      soundDeviceRate  22050
      soundDeviceBits  8
    }