Shapeノードは立体の形状を定義します。定義形式を次に示します。
Shape { exposedField SFNode appearance NULL exposedField SFNode geometry NULL ↑ ↑ ↑ ↑ フィールドの属性 フィールドの型 フィールド名 デフォルト値 } |
Shapeノードには、立体の形を決める geometryノード(Box などのノード)を記述した geometryフィールドが1つ含まれます。立体の外観の色などを決める appearanceノードは省略でき、次に示すものが最小の形式です。
#VRML V2.0 utf8 Shape { geometry Box{ } } |
geometryフィールドには geometryノードを記述します。
geometryノードには、次に示す Box、Cylinder、Sphere、Text、IndexedFaceSet、IndexedLineSet、PointSet、Extusion、ElevationGridがあります。
各フィールドの定義形式について、Boxを例に説明します。
|
|
|
左側が定義形式です。フィールドの属性はフィールド値をどのように扱うかを定義するものです。フィールドの型はフィールドの設定する値の型で、SFVec3fは3次元のベクトル値で実数を3つ、x,y,zの順に並べたものです。詳細は「VRMLの構造」の「フィールドの属性と型」を参照してください。
右側は、3辺の長さがx方向に2、y方向に1、z方向に3のBoxを記述したものです。
Boxは直方体を作るノードで次の形式です。sizeフィールドで直方体の3辺の大きさを設定します。デフォルト値は1辺が2の立方体です。
Box { field SFVec3f size 2 2 2 } |
Coneは円錐を作るノードで次の形式です。
Cone { field SFFloat bottomRadius 1 field SFFloat height 2 field SFBool side TRUE field SFBool bottom TRUE } |
bottomRadiusフィールドは円錐の底面の半径、heightフィールドは高さです。sideフィールドとbottomフィールドは側面や底面を表示する場合は TRUE、表示しない場合は FALSEとします。
Cylinderは円柱を作るノードで次の形式です。
Cylinder { field SFBool bottom TRUE field SFFloat height 2 field SFFloat radius 1 field SFBool side TRUE field SFBool top TRUE } |
radiusフィールドは円柱の半径、heightフィールドは高さです。side、bottom、topフィールドは側面や底面や上面を表示する場合は TRUE、表示しない場合は FALSEとします。
Sphereは球を作るノードで次の形式です。radiusフィールドは球の半径です。
Sphere { field SFFloat radius 1 } |
Textは文字を作るノードで次の形式です。
Text { exposedField MFString string [] exposedField SFNode fontStyle NULL exposedField MFFloat length [] exposedField SFFloat maxExtent 0.0 } |
stringフィールドには文字列を指定します。 ["Hosei Univ."]のように記述します。日本語は使用できません。fontStyleフィールドでは、FontStyleノードでフォントやサイズなどを指定します。具体例は「shapeの例」参照してください。
FontStyle { field MFString family "SERIF" field SFBool horizontal TRUE field MFString justify "BEGIN" field SFString language "" field SFBool leftToRight TRUE field SFFloat size 1.0 field SFFloat spacing 1.0 field SFString style "PLAIN" field SFBool topToBottom TRUE } |
IndexedFaceSetは多面体(面だけの場合を含む)を作るノードで次の形式です。coordフィールドで頂点の座標を与え、coordIndexフィールドで面の構成を記述します。colorフィールドで頂点または面の色を指定します。具体的な例は「shapeの例」を参照してください。
IndexedFaceSet { eventIn MFInt32 set_colorIndex eventIn MFInt32 set_coordIndex eventIn MFInt32 set_normalIndex eventIn MFInt32 set_texCoordIndex exposedField SFNode color NULL exposedField SFNode coord NULL exposedField SFNode normal NULL exposedField SFNode texCoord NULL field SFBool ccw TRUE field MFInt32 colorIndex [] field SFBool colorPerVertex TRUE field SFBool convex TRUE field MFInt32 coordIndex [] field SFFloat creaseAngle 0 field MFInt32 normalIndex [] field SFBool normalPerVertex TRUE field SFBool solid TRUE field MFInt32 texCoordIndex [] } |
Coordinate { exposedField MFVec3f point [] } |
coordIndexフィールドで面の構成を与えます。1つの面についてのその面を構成する頂点の番号(pointフィールドに並べた順)を面の表側から見て左回りに並べ最後に-1を付けます。例えば頂点番号0から5までで構成される5角形は 0 1 2 3 4 5 -1 と記述します。この組を面の数だけ並べます。
Color { exposedField MFColor color [] } |
colorPerVertexフィールドの値がTRUEのときは頂点の色、FALSEのときは面の色になります。
colorIndexフィールドには、colorフィールドに並べた色がどの頂点または面に対応するかを頂点や面の番号で指定します。
colorIndexフィールドの値がNULLのときは、colorフィールドに並べた色がpointフィールドで座標を指定した順番に頂点に付けられます。面の場合はcoordIndexフィールドで指定した面の順番に色が対応します。
IndexedLineSetは線を定義するノードで次の形式です。coordフィールドで点の座標を与え、coordIndexフィールドで線の構成を記述します。colorフィールドで点または線の色を指定します。ノードの記述の方法はIndexedFaceSetの説明の面を線と読みかえて下さい。ここでは説明を省略します。具体的な例は「shapeの例」を参照してください。
IndexedLineSet { eventIn MFInt32 set_colorIndex eventIn MFInt32 set_coordIndex exposedField SFNode color NULL exposedField SFNode coord NULL field MFInt32 colorIndex [] field SFBool colorPerVertex TRUE field MFInt32 coordIndex [] } |
PointSetは点を作るノードで次の形式です。colorフィールド、coordフィールドはIndexedFaceSetおよびIndexedLineSetと同じです。
PointSet { exposedField SFNode color NULL exposedField SFNode coord NULL } |
ExtrusionはcrossSectionフィールドで与えられた平面の形を、spineフィールドで指定した線に沿って、scaleフィールドで指定した比率で押し出した形を作るノードです。次の形式をしています。具体例は「shapeの例」を参照してください。
Extrusion { eventIn MFVec2f set_crossSection eventIn MFRotation set_orientation eventIn MFVec2f set_scale eventIn MFVec3f set_spine field SFBool beginCap TRUE field SFBool ccw TRUE field SFBool convex TRUE field SFFloat creaseAngle 0 field MFVec2f crossSection [ 1 1, 1 -1, -1 -1, -1 1, 1 1 ] field SFBool endCap TRUE field MFRotation orientation 0 0 1 0 field MFVec2f scale 1 1 field SFBool solid TRUE field MFVec3f spine [ 0 0 0, 0 1 0 ] } |
crossSectionフィールドは、y=0の平面(xz平面)上の面を指定します。2次元ベクトル値で面の構成する頂点のx,z座標を頂点の数+1個並べます。最初と最後は同じ座標になります。
spineフィールドには、いくつかの点の座標を3次元ベクトル値で与えます。その点を結んだ折れ線に沿って、crossSectionフィールドで指定した面の形が押し出されます。
scaleフィールドには、いくつかのx,z方向のスケールを与えます。spineフィールドに指定した点に対応してスケールが与えられます。spineフィールドに指定した点の数が多い場合はscaleフィールドの最後の値が繰り返されます。
ElevationGridは地形を作るノードで次の形式です。地形はy=0の平面(xz平面)上に作成します。具体例は「shapeの例」を参照してください。
ElevationGrid { eventIn MFFloat set_height exposedField SFNode color NULL exposedField SFNode normal NULL exposedField SFNode texCoord NULL field MFFloat height [] field SFBool ccw TRUE field SFBool colorPerVertex TRUE field SFFloat creaseAngle 0 field SFBool normalPerVertex TRUE field SFBool solid TRUE field SFInt32 xDimension 0 field SFFloat xSpacing 1.0 field SFInt32 zDimension 0 field SFFloat zSpacing 1.0 } |
xDimensionフィールドとzDimensionフィールドでx,z方向のグリッドの数を与えます。全体のグリッドの数はxDimensionフィールドの値(m) × zDimension(n)フィールドの値で、グリッドにはグリッド番号が0からm×n-1までふられます。
xSpacingフィールドとzSpacingフィールドでグリッドの間隔を与えます。
heightフィールドでは各グリッドのy方向の高さを実数値で与えます。
Appearanceノードは立体の外観を定義するものです。Appearanceノードには外観を色で表す materialフィールド、イメージファイルを貼り付ける textureフィールド、 イメージファイルの貼り付け方を指定する textureTransformlフィールドを指定できます。定義形式は次のとおりです。
Appearance { exposedField SFNode material NULL exposedField SFNode texture NULL exposedField SFNode textureTransform NULL } |
materialフィールドは Materialノードで構成されます。textureフィールドは、texture ノード(ImageTexture, MovieTexture, PixelTexture)で構成されます。textureTransformフィールドは、TextureTransformノードで構成されます。次にこれらのノードについて記します。
materialフィールドには Materialノードを記述します。Materialノードの定義形式は次のとおりです。
Material { exposedField SFFloat ambientIntensity 0.2 exposedField SFColor diffuseColor 0.8 0.8 0.8 exposedField SFColor emissiveColor 0 0 0 exposedField SFFloat shininess 0.2 exposedField SFColor specularColor 0 0 0 exposedField SFFloat transparency 0 } |
Materialノードに指定するフィールドついて以下に記します。
textureフィールドは、texture ノード(ImageTexture, MovieTexture, PixelTexture)で構成されます。ここではImageTextureノードについて説明し、MovieTextureノードとPixelTextureノードについては省略します。
ImageTexture { exposedField MFString url [] field SFBool repeatS TRUE field SFBool repeatT TRUE } |
textureTransformフィールドは、TextureTransformノードで構成され、Textureの貼り付け方(位置や大きさ、方向)を設定します。
TextureTransform { exposedField SFVec2f center 0 0 exposedField SFFloat rotation 0 exposedField SFVec2f scale 1 1 exposedField SFVec2f translation 0 0 } |
次に、Texture座標の変換ついて説明します。
次の図の左側はtexture座標で、イメージファイルの横方向をs軸とし、s方向のイメージファイル一つ分の大きさを1とします。イメージファイルの縦方向をt軸とし、t方向のイメージファイル一つ分の大きさを1とします。
右側の図は座標変換をせずに面に貼り付けたときの面上の座標系を緑の軸で示しています。この座標の原点が面の左下に置かれ、面の横方向の大きさを1、縦方向の大きさを1にします。すなわち、イメージファイルは面の大きさに合わせて貼り付けられることになります。
![]() |
次の図は scale 2 2 と指定した場合です。texture座標のスケールの s、t方向ともに2倍の位置に、緑の座標系の1を合わせます。すなわち、イメージファイルは面上に縮小して貼り付けられることになります。
![]() |
次の図は translation 0.2 0.3 と指定した場合です。texture座標のs=0.2, t=0.3 の位置に、緑の座標系の原点を合わせます。すなわち、イメージファイルは面上で逆の方向に移動したように見えます。
![]() |
次の図は rotation 0.5 と指定した場合です。緑の座標系を半時計回りに30°回転します。すなわち、イメージファイルは面上で逆に時計回りに30°回転したように見えます。
![]() |
次の図は translation 0.2 0.3 と rotation 0.5 を指定した場合です。座標変換の順番に従って、まず、緑の座標系を半時計回りに30°回転します(破線)。次に s方向に 0.2, t方向に 0.3 移動します(実線)。
![]() |
次の図は center 0.8 0.0 と rotation 0.5 を指定した場合です。座標変換の順番に従って、まず、緑の座標系を s方向に -0.8, t方向に 0 移動します(破線)。次に緑の座標系を半時計回りに30°回転します(長破線)。次に s方向に 0.8, t方向に 0 移動します(実線)。
![]() |
ImageTextureノードのrepeatSフィールドやrepeatTフィールドがFALSEのときは、イメージファイルは繰り返し貼り付けられませんので、上の図に示したように1枚のイメージファイルから外れた部分は、表示されません。repeatSフィールドやrepeatTフィールドがTRUEのときは、面上にイメージファイルが繰り返し貼り付けられます。