テクスチャの貼り付けと回転


#VRML V1.0 ascii

Separator {

	DEF BackgroundColor Info {
		string "1 1 1"
	}

	Texture2 {
		filename  "gon_1.gif"
	}

	SpinGroup {
		rotation 1 0 1 .05
		local TRUE
		DEF cube Separator {
			Cube {
				width	10
				height	10
				depth	10
			}
		}
	}
}


ここで新しく出てくるnodeは下の3つだけです。
DEF BackgroundColor Info{ }
DEF nodeそのものは前も出てきましたが、DEFだけ書いても何の意味もありません。この場合、
BackgroundColorを情報(Info)として定義しています。実際、VRML1.0の規定の中ではBackgroundcolorというのは何の意味も持ちません。それでは、これが何のためにあるのかというと
このBackgraoundColorという情報を理解できるソフトのために存在します。端的に言うと、これは
VRML browserに情報を渡しているのです。このBackgroundColorというのは殆どのVRMLブラウザ
が理解できるようなので、実質的にはVRMLの言語仕様と同じことです。
このBackgroundColorでは色を他と同様にRGBで定義します。「string」の文字に続けてダブルコーテーションの中に3つの整数を空白を1つづつ空けて書けばいいだけです。実際には、

DEF BackgroundColor Info { string "1 1 1" }

のように書きます。

この他にも特定のブラウザーだけが理解できる情報が存在し、それを同様の形式で渡すことができます。何かいい例を載せたかったのですがあいにく見つかりませんでした。

Texture2 { }
Texture2 nodeはオブジェクトにテクスチャを貼り付けるnodeです。テクスチャはbmp、jpgやgif形式のファイルで模様とかのことです。また、壁とか床とか空とかもtextureを貼ってあらわすことが多い。なんでTexture2というのか? それは2次元のテクスチャを貼り付けるからです。
Texture2 nodeが指定されるとその後に定義されるすべてのオブジェクトにそのテクスチャが貼り付けられてしまいます。従って、Texture2 nodeはSeparator nodeの中で使うのが良いでしょう。
貼り付けるテクスチャはfilenameパラメータでファイル使うか、もしくはimageパラメータを使用してデータを使うかのどちらかです。
指定できるパラメータは以下の4つです。filename パラメータとimage パラメータは同時 指定はできません(してもいいですが、何もしていないのと同じことになります)。

	filename ""	<--- ""の中にファイル名を指定する。
image i1 i2 i3 <--- データとしてのイメージ指定
wrapS REPEAT <--- 横(水平方向)にテクスチャをどう貼り付けるかの指定
wrapT REPEAT <--- 縦(垂直方向)にテクスチャをどう貼り付けるかの指定
一般的には、filenameパラメータを使って絵を貼り付けるのが主目的だと思われるので、imageパラメータの細かい説明は省こうかと思ったのですが、とりあえず説明だけしておきます。
ただ、実際にはimgeパラメータを使った場合はテクスチャ張り付けといってもオブジェクトに色を塗るのとまったく同じです。しかし、便利な機能として, ひとつのオブジェクトを複数の色に塗り分けられるという機能がある。
imageパラメータの引数は三つの整数です。これは左から横分割の数、縦分割の数、そして色の要素です。色の要素というのは"1"が指定されたら白黒(グレースケール)で3が指定されたらRGBということです(この2種類しか指定できないみたいです)。さらに、imageパラメータを使用する場合、三つの整数に加えて色を指定する引数を定義してやらなければならないのです。3つ目の整数(上のi3)が1の場合は0xnn(nnは00からFFまでの16進数)で色を指定し、3の場合は0xnnoopp(nn、oo、ppはそれぞれ00からFFまでの16進数)を指定します。
なんだか、よく分からなくなってきましたよね。きっと!
実際はこのように指定するとこのようになります。
wrapSとwrapTについては、オブジェクト(もしくはオブジェクトの一つの面)が、テクスチャサイズよりも大きかった場合に、縦横それぞれの方向にテクスチャをどう貼り付けるかの指定です。REPEATとCLAMPの2つが指定可能です。要はREPEATと指定すれば格子状にして、CLAMPとすれば拡大してテクスチャを面もしくはオブジェクト一杯に張りつけるというものです。しかし、私が使っているLIVE3Dではこの機能はサポートされないのか、うまく動きません。それに加え、メートル法を採用しているVRMLに対してテクスチャサイズはどう比較するのかもよく分かりません。テクスチャを格子状に貼り付けたい場合にはTexture2Transform node(次ぎのサンプルで説明)を使った方が確実です。

SpinGroup { }
SpinGroup nodeはVRML 1.0では対応していません。したがってブラウザ独自機能ということになりますが、今はほとんどのVRMLブラウザでサポートされているので、実質上VRML1.0の仕様と言ってもいいでしょう。但し、Cosmo PlayerはVRML 2.0をメインにサポートしているので、VRML 1.0の拡張にあたるSpinGroupはサポートされていないようです。この分だとSonyなどVRML 2.0用のブラウザでもサポートされていないかもしれません。
このnodeは{ }内に定義されたオブジェクトを回転させるものです。
使用するパラメータは基本的に以下の二つ。

	rotation 1 0 1 .05     <--- どう回転するかの指定
	local TRUE	    <--- 自転するかどうかの指定。自転するなら"TRUE"
				 しないなら、"FALSE"と指定する。
上のrotationの引数は4つです。最初の3つで回転する方向を現し、最後の一つでスピードをあらわします。最初の3つは例によってX、Y及びZ方向を現します。Xを1とするとX軸を中心に回ります。-1にするとX軸を中心に逆回転します。XとYの両方を1とすると、X軸とY軸の間真ん中つまり、前方から見て45度の線を軸として回転します。
4番目のスピードですが、1が最高スピードになりますので、0から1の間で指定しましょう。ただ、これはCPUの性能とかによってもスピードが変わっちゃうので一概に何を指定するとどれくらいのスピードになるかとかは言えませんが....。

今回はここまでです。


戻る
次のサンプルへ
メインページ