3次元空間の図形を頭の中でイメージするのはとても難しいものがあります。目の前のペーパーにいろいろ書き込んでみても、図がきたなくなるだけで、よけい分からなくなってしまうことなどはよくありませんか。
コンピュータで再現したくても、よいソフトがなかったり描画に時間がかかったり。何よりアルゴリズムが難しすぎて、プログラムはとてもする気にはならないところです。
そんな悩み、ストレス感を「VRML」は解消してくれます。また、なによりwebサイトを一つのHomeSpaceにしてくれるのです。言語のようでありながら、言語ではないそんな世界を通して、空間イメージを膨らませてくれる題材を探してみましょう。 なお、このテーマはどんどんバージョンアップしていくつもりです。VRMLも仕様2がでていますので、ブラウザの進化とともに変化して行くでしょう。最初は大した内容ではありませんが今後に期待して下さい。
円すい曲線としての2次曲線
楕円、双曲線、放物線は統合して「2次曲線」と呼ばれます。それは、これらの曲線を表す方程式が座標x,yについての2次式となるからです。見かけ上異なった形をしているこれらの曲線はどのように関連しあっているでしょう。
それを直感的に把握できるのが「円すい曲線」といえます。一般に、円すいを平面で切ったとき、その切り口に現れる曲線は円すい曲線と呼ばれています。円すい曲線の形は、円すいとそれを切る平面の位置関係によって変わります。それを3次元空間の中でのぞいてみましょう。
つぎのように円すいを平面で切った断面はどうなっているでしょう。クリックしてみて下さい。単純な3次元空間の世界に入ることができます。回転させて断面を確認してみましょう。
なお、このページに戻るとには「戻る(BACK)」ボタンを押して下さい。
空間における2直線の位置関係と回転
空間上における2つの直線の位置関係としては
平行 ねじれ 一点で交わる 一致
の四つが考えられます。次の図の様に、二つの直線をおき中心となる縦の軸に対して回転させるとどのような図形ができるでしょうか。クリックすると3次元画面に変わりますので、試してみて下さい。(一致する場合は明らかなのでのぞきました)
平行 | ねじれ | 交わる |
---|---|---|
どうですか。イメージすることができましたか。平行なときは円柱面、ねじれの位置にあるときは(一葉)双曲面、一点で交わるときは円錐面ができあがるのが分かると思います。
それでは問題です。次のようなさいころ「MATH CUBE」を図の中の軸を中心として回転させたとき、どんな形に見えるでしょうか。これもクリックすると3次元空間に入れますよ。
これは次のように3つの部分に分けて考えると考えやすいといえます。3つの部分の各辺と回転軸との位置関係を考えます。1番目の部分と3番目の部分は「交わる」状態ですが、2番目の部分は「ねじれ」の状態となります。先ほどのことから、円錐面と双曲面とが合わさった図形になります。
交わる | ねじれ | 交わる |
---|---|---|
VRML for Building Cyber Space
今回用いた言語は「VRML(Virtual Reality Modeling Language)」と呼ばれるものです。VRMLはHTMLの3次元版であり、インターネット上でサイバースペースを構築するための言語です。
言語といってもCや他のコンピュータ言語のようなプログラミング言語ではなく、”シーン記述言語”といえます。VRMLのイメージは、まず一つの風景(シーン)があり、その中にいくつものオブジェクト(ノードという)が配置されるといったものでしょうか。
他のプログラミング言語のようにコンパイルされ、実行されるわけではありません。VRMLファイルはコンピュータに理解可能なオブジェクトの集合に変換され(パーズという)画面上に表示されます。プラットホームに独立なのです。
まさにコンピュータグラフィックス向けに特化したもので、豊富なモデルを容易に生成することができる組み込み機能を多く備えているのです。
なによりテキストベースで作成し、読みとり可能なブラウザがあれば、すぐに表示できるところが手軽で使いやすいといえます。(ActiveXでは組み込み可能で、IEの次のバージョンではVRMLの2か3が標準で装備されると思います。)
以前は3次元グラフィックスを作成しようとするとき、様々な困難な点があったのを考えると、格段の違いを感じさせてくれるといえます。
それでは、つぎに簡単な例を紹介しますので参考にしてみて下さい。
(1)簡単な物体の作成
組み込み可能な物体の種類は主として次の4つです。
Sphere(球)、Cube(直方体)、Cone(円錐)、Cylinder(円柱)
この中から、いま立方体を作ってみましょう。
#VRML V1.0 ascii# Example_1 1辺10の立方体Cube { width 10 #幅 10 height 10 #高さ 10 depth 10 #奥行き 10}
自分の使用しているテキストエディタで作成し、なにか名前をつけて保存して下さい。ただし、拡張子は「*.wrl」として下さい。
作ったファイルをブラウザで読み込むだけで、画面に表示させることができます。(なお、1行目の「#VRML V1.0 ascii」は必ず入れて下さい。)
(2)2つの物体を作って色と移動距離を指定する
次に2つ物体を作って、それに色を付けてみましょう。
#VRML V1.0 ascii# Example_2 2つの物体(色と移動距離の指定)#Separatorノードはその中のものをグループ化するSeparator { Material { diffuseColor 1 1 0 #色の指定(左からR,G,B) } Transform { translation 0 20 20 #移動(左からx,y,z) } #直方体 Cube { width 10 height 10 depth 10 }}Separator { Material { diffuseColor 1 0 1 } Transform { translation -20 0 -10 } #円柱 Cylinder { radius 4 height 10 }}
上の例に出てきたSeparatorノードはグループノードの一つで、箱の様に機能します。つまり、その中にある全てのものを一体のものとして扱うことを宣言するのです。また、箱の中のものに変更を加えても箱の外のものには影響を与えません。
VRMLにおける座標系は右の図のようになっています。defaultでは画面の中心が原点ですから、Transformノードを使って物体を移動することができます。
また、オブジェクトの基本色はMaterialノードのdiffuseColorフィールドを使って指定します。物体の色をR(赤)、G(緑)、B(青)の各成分を組み合わせて作ります。
(3)物体に壁紙をはりつけてみよう
次にある物体に壁紙を貼り付けてみましょう。左にある丸い物体に右側の世界地図を貼り付けてみます。
#VRML V1.0 ascii# Example_3 物体に壁紙をつけるSeparator { Material { emissiveColor 1 1 0 #放射光の色 } #点光源の定義 PointLight { intensity 1 #輝度 color 1 1 0.9 #色 } Sphere { radius 100 } Separator { Transform { translation -260 60 80 } Material { diffuseColor 0 0 1 #拡散光の色 specularColor 0.9 0.9 0.9 #鏡面光の色 shininess 0.9 #鏡面の指数 } #壁紙の貼付 Texture2 { filename "earth.gif" #貼り付けるイメージ } Sphere { radius 30 } }}
このソースの中で壁紙を貼り付ける部分はTexture2ノードを使っているところだけである。filenameフィールドで指定したイメージファイル(テキスチャマップという)を取り込めば、それだけで完成である。こんな簡単な貼り付けにただただ驚くばかりである。
さいごに
VRMLの世界をかいま見ることによって、長年つかえていたとげがとれたような気になりました。webサイトをSpaceHomeにしてくれる、新たな希望を与えてくれます。
しかし、わたしが志向するExperimentalな題材作成という面においてVRML 1.0が最もかけているのは「interactive」という点です。しかしこの点もVRML 2.0になることにより、解消されているようです。
紙の上だけでは得られなかった新たな武器を与えられたわけですから、より視覚にうったえる面白い題材を考えていきたいと考えます。最初のバージョンなのでたいした内容もなく公開するほどのものではありませんが、これからに期待してほしいと思います。
<参考文献>