座標系
< 前へ [ トップへ ] 次へ >

 ここでは、動きのある3D表現を扱う上で欠かせない概念である、「座標系」について解説します。
 「座標系」と言うと難しく感じるかもしれませんが、RINEARN-X 3Dでは座標系を非常に簡単に扱えるように工夫されています。具体的な利用方法は後に解説するとして、ここでは座標系そのものの意味、また利点などについて解説します。


 座標系とは

・座標系と位置ベクトル
 座標系は、空間中の位置を指定する際に、基準とされる存在です。例えば右図のように、部屋の中にボールが置かれていたとしましょう。
 このボールの位置を伝えるには、あなたを基準として、右に1m、前に2m、上に3m、といったように表現することができるでしょう。これを数字で ( 1, 2, 3 ) と書く事にします。このように位置を表す3つの数字の組のことを、一般に位置ベクトルと呼びます。
 さて座標系とは、ここで言えばあなたの事です。つまり上の例では、あなたという座標系から見たボールの位置が、( 1, 2, 3 )である、と言う事になります。

・位置ベクトルは座標系によって異なる
 ここで注意すべきなのは、ただ単に ( 1, 2, 3 ) という数字だけでは、位置を伝えるには不十分だ、と言う事です。なぜなら、( 1, 2, 3 ) が指し示す位置は、それが誰から見たものかによって異なるからです。
 左の図のように、あなたにとって右に1m、前に2m、上に3m行った地点は、別の人にとっては右に0m、前に5m、上に3m行った地点かもしれません。 この場合、この別の人はボールの位置を ( 0, 5, 3 ) と伝えるでしょう。同じボールの位置を指定しているはずなのに、あなたから見たものとは全く別の位置ベクトルですね。
  
 このような不一致が起こる理由として、まず第一に、両者は立っている位置が違います。つまり両者にとっての原点: ( 0, 0, 0, ) が指し示す位置が既に異なるのです。そして第二に、両者が正面を向いている方向も違いますから、「右」や「前」が指し示す方向も、両者で異なるのです。つまりあなたにとっての「右」と、別の人にとっての「右」は方向が違うのです。
 
つまり空間中の位置を伝えるには、誰から見たのかという基準が必要なのです。そして、この基準となるのが座標系なのです。


■ 立体を動かす仕組み
 座標系は、立体を動的に動かしたい場合に使用します。それでは、座標系をどのように使って立体を動かすのでしょうか。その原理を説明しましょう。
 まず適当な座標系を用意し、立体をその座標系の ( 1, 2, 3 ) に配置します。別に位置はどこでもかまいませんが、例としてここでは ( 1, 2, 3 ) にしました。 次に、座標系を動かします。

  

 すると、座標系に配置された立体も一緒に動いて見えます。なぜなら座標系が動くと、その座標系を基準にした ( 1, 2, 3 ) が示す場所も動くからです。要するに、立体を動かすにあたって、 「 立体の位置情報を書き換える代わりに、位置の基準(=座標系)を動かした 」 という事です。
 「 なんだ、ばかばかしい、当たり前のことではないか 」 と思われるかもしれません。しかし座標系とは、言葉は難しそうですが単にこれだけのものであり、それ以上のものでは無いのです。


■ なぜ座標系を使うのか
 動く立体の数が少ない場合などには座標系を使う恩恵は少ないですが、一緒に動く立体の数が多くなったり、複数の軌道が合成された複雑な動きを表現する場合などには、座標系の強力さを実感できるでしょう。
 加えて、立体が所属する座標系を動かす処理は、立体を構成する全ポリゴンの座標値を一枚一枚書き換えるのに比べて、大幅に軽いという点も重要です。例えば、座標系を用いずに立体モデルの move メソッドや rot メソッドを連続的に呼び出し続ける事でも、立体の動きを(無理矢理)表現する事は可能ですが、その処理は座標系を活用するよりもかなり重くなってしまうでしょう。
 この処理速度の違いは、特に回転操作の場合において著しく表れます。というのも、3次元の回転操作には多くの三角関数を用いた比較的重い処理を要するからです。立体を構成する全てのポリゴンを個別に回転させると数万回の回転演算が必要ですが、座標系を回転させるにはたった3本の基本ベクトルを回転させるだけで済んでしまいます。
 平行移動操作の場合でも、ポリゴン数が多くなると、内部処理においてメソッド呼び出しのオーバーヘッドが影響してくるため、やはり素直に座標系を用いたほうが若干高速な処理が可能です。

< 前へ [ トップへ ] 次へ >

この階層の目次
新しいお知らせ

Vnanoの公式サイトがオープン、チュートリアルやAPI仕様書等も掲載
2019年08月07日 - オープンソースのアプリケーション組み込み用スクリプトエンジン「 Vnano 」の公式サイトを開設しました。チュートリアルや、スクリプトエンジンのAPI仕様書などが参照できます。その概要をお知らせします。

リニアングラフ3D/2Dが連番ファイルのアニメーションに標準で対応
2019年07月17日 - リニアングラフ3D/2Dでは、7月17日公開の最新版より、連番ファイルを連続的に読み込みながらアニメーション描画するプログラムを同梱し、メニューから標準で使用可能になりました。その概要をお知らせします。

Vnanoのスクリプトエンジンアーキテクチャ解説2: コンパイラ
2019年07月03日 - オープンソースで開発中のスクリプトエンジン「 Vnano 」のアーキテクチャを解説する連載の第2回です。今回は、スクリプトを中間コードへと変換する、コンパイラ部分の内部をクローズアップして解説します。

コードアーカイブ新着
[公式ガイドサンプル] ユーザーのGUI操作に対して処理を行う

「VCSSL GUI開発ガイド」内のサンプルコードです。ユーザーがGUIを操作した際に行う処理を実装します。
2019年07月28日
[公式ガイドサンプル] 各種GUIコンポーネントを画面上に配置する

「VCSSL GUI開発ガイド」内のサンプルコードです。色々な種類のGUI部品を画面上に配置します。
2019年07月28日
連番ファイルから3Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、3Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年06月03日
連番ファイルから2Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、2Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年05月24日
[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを生成し、3D空間に配置します。
2019年05月21日
公式Twitterアカウント