PS2Linux/3Dの基本知識

PS2Linux/3Dの基本知識

# 3次元における基本的な知識

 ここでは、3次元を扱う上でよく使われる言葉についての説明を行いたいと思います。  

# ベクトル

  • 数学的説明
1
   量的概念しかもたないスカラーと異なり、量と方向性を持つ概念 
  • 簡単な説明

私たちはゲームを買うときそのゲームに見合った代金を支払います。例えば 5,800円だったりしますよね。また、車やバイクに乗ってるとき、スピードメー ターが時速を教えてくれます。例えば60km/hだったりします。これらは、一目 見ただけだと、ただの数字でしかありません。「5800」や「60」という数字は、 他に意味を持たないわけです。ただ、ゲームを買う場合は私達はお店の人に 5,800円を支払うわけですし、60km/hの速さで東京から大宮へ向かってるとい うこともあるわけです。このように、ただの数字に意味のある「方向」という 概念をとりいれると、ただの「5800」や「60」でなく、「私->店 5800」や 「東京->大宮 60」という表現のしかたもあるわけです。ちょっと簡素化しま したが、これがベクトルの基本概念です。

#ref(fig1_2.gif,center)

  • 主な使用法

座標系で使われる場合、以下のような使い方をします。話しを簡単にするため、 2次元で考えましょう。点Aと点Bという2つの点があったとして、AからB へのベクトルABを考えます。点Aの座標が(1,2)、点Bの座標が(3,10)だっ たとして、ベクトルABは図的に表現すると(絵)の用になります。また、ベ クトルには成分と呼ばれるものがあり、XY座標系においてはX方向にどれだ け動き、Y方向にどれだけ動いたかといった値を利用します。すなわち、ベク トルABの成分は、(3-1,10-2)=(2,8)ということになるわけです。つまり、始 点とベクトルの成分がわかると、自動的に終点も決まるわけです。

 

# 位置ベクトル(ローカル座標)

  • 数学的説明
1
2
   ベクトルの基点を同じとし、各座標を終点としたベクトルのことを特に
   位置ベクトルという。 
  • 簡単な説明

あなたが今、机で勉強しているとしましょう。勉強するためには、いろいろな 道具が必要です。鉛筆、消しゴム、ノート、参考書、辞書、気晴らしのための ゲームコントローラ等。あなたはとてもものぐさで、イスから動かずにそれら を取ろうとしたとします(私がそうだったりします(笑))。例えば鉛筆は目の 前30cmのところに置いてあるし、消しゴムは右に20cm、ノートは左に10cm、コ ントローラは後ろに100cmだったりします。これらは、先程説明した量と方向 をもったベクトルなわけです。ここで、それぞれの道具の立場になって考えて みると、全てあなたの位置を基準にして考えられています。先程のベクトルの 説明の話しでは、「私->店」や「東京->大宮」などは、もしかしたら「私のお 父さん->店」だったり「香港->大宮」だったりしてもいいわけです。今回の例 は常に「あなた」を基準にしているため、すべての道具にとって、始まりは分 かりきっていることなので、いまさら明記しなくてもいいということになりま す。すなわち、「->鉛筆 30」となるわけです。これが位置ベクトルの概念と なります。

主な使用法

立方体を考えてみましょう。立方体には8つの頂点があって、それらには座標 があるとします。立方体が変形しなかったとしたら、この8つの頂点の相対的 な位置は変わらないのですが、座標で管理すると、移動などをしたあとでも8 つの座標を全て再計算しなければならなくなります。これを位置ベクトルで管 理するとすれば、基準となる点の移動量を計算すれば、あとは各点の座標は位 置ベクトルを利用して簡単に算出できるわけです。これがいわゆるオブジェク ト固有のローカル座標系ということになります。

#ref(fig1_3.gif,center) #ref(fig1_4.gif,center)

 

# 法線ベクトル

  • 数学的説明
1
2
   ある平面に対して垂直方向なベクトルのことをいう。平面は、通過点と法線ベ
   クトルで決まるので、法線ベクトルは平面の方向を決めるのに使われる。 

簡単な説明

あなたが地上にまっすぐ立っていたとしましょう。もし、「地上に並行な方向 を指でさしてみなさい」といわれた場合、方向は沢山あるはずです。つまり、 地上という平面(本当は球面ですが(^^;)は、面に対して並行な方向というの が無限にあるため、平面の傾きを表現するのには利用できないのです。では、 今度は「地上に垂直な方向を指でさしてみなさい」といわれたらどうなるでしょ うか。まっすぐ上かまっすぐ下しかさせないですよね。つまり、平面は、並行 方向で決まるのではなく、垂直方向によって決まるものなのです。この、平面 に対して垂直な向きのベクトルのことを、法線ベクトルといいます。先程の例 でいえば、あなたが差した指の方向がそうです。

#ref(fig1_5.gif,center)

  • 主な使用法

平面の向きを決定するのが法線ベクトルなので、面の向きに関る計算などは主に法線ベクトルを利用して行われます。光源計算に利用されたりするのはそのためです。

 

# マトリックス

  • 数学的説明
1
   いわゆる行列のことである。ベクトルの変換演算などに利用することが多い。 
  • 簡単な説明

要はマトリックスっていうのうは、複雑な計算を一遍にやってくれる賢いやつ だと思ってください。関数電卓っぽいイメージをもっていただくといいかもし れません。関数電卓にはいろいろな機能が付いていますよね。単純な四則演算 から、微分積分までさまざま。人間が入力する数値を関数電卓が計算してくれ る、そういうマルチに計算してくれる箱だと思ってください。答えさえ出てく れれば中身は特に気にしないでもいいので、電卓の中がどうなっているかより も、使い方を知るほうがいいですよね。それから、マトリックスは、マトリッ クス同士で計算することで、別のマトリックスにもなります。例えていうなら ば、関数電卓にあるカードをさすと家計簿にもなるみたいな感じです。

#ref(fig1_6.gif,center)

  • 主な使用法

主にマトリックスは、オブジェクトの回転移動などの計算式として多く使われ ます。また、座標変換式にも使われます。ただ、マトリックスの中身は、利用 する側が意識しなくてもよく、「あ、これは10度回転するマトリックスなん だ」とか「これはローカルな座標をワールドな座標に変換するマトリックスな んだ」だけ知っていればいいのです。要はC言語の標準ライブラリ関数の仕様 だけ知っていれば、中のソースは知らなくてもいい、printf()みたいな感覚で いいでしょう。

# PlayStationでの3次元モデルの表現方法

ここでは、PlayStationでどのように3次元オブジェクトを画面に表現するかについてを簡単に説明します。

例えば、立方体を描画するとしましょう。立方体には8つの頂点があり、モデ リングデータにはそれら8つの頂点座標、すなわちそのオブジェクトのローカ ル座標が既に決まっています。では、これだけでPlayStationの画面に立方体 を表示することができるでしょうか?残念ながら、いくつか足りない情報があ ります。それは、立方体をどこに置くかという情報と、最終的にPlayStation の画面でどこに見えるようになるかという情報です。前者のための座標系をワー ルド座標系とよび、後者をスクリーン座標系といいます。イメージとしては、 ゲームでキャラクタは決まったが、まだマップが決まってなく、またマップの どのあたりを表示するかも決まってない段階と考えてください。

#ref(fig2_1.gif,center)

では、立方体を置く場所を決めたとしましょう。でも、現在分かっている座標 は、ローカル座標しかわかっていないのです。そのために必要となるのが、座 標変換という考えです。座標変換には、マトリックスという便利な計算式を使 います。マトリックスの計算式は、スタータキットに同梱されてきたUser’s Guide(黄色い本)の57、58ページにありますが、式自体にさほど意味は ありませんので、理解しようと思わないほうがいいでしょう。それよりも、マ トリックスとは、変換するための道具と思ってください。

立方体の8つの頂点座標をローカル座標系からワールド座標系に変換するマト リックスが出来て、同様にワールド座標系をスクリーン座標系にも変換するマ トリックスもできたとしましょう。マトリックスのところで説明しましたが、 マトリックスは組み合わせることでまた別のマトリックスになることができま す。すなわち、

ローカル -> ワールド
+
ワールド -> スクリーン
↓
ローカル -> スクリーン

というマトリックスができます。それを計算する関数が、GsGetLs()関数 (Library Reference の137ページ)なのです。GsGetLsのLがローカルでsが スクリーンを意味します。では、最初に求めたローカル -> ワールド変換マト リックスは必要ないのかといいますと、実はこれも必要なのです。

立方体の最終的に表示される座標は決まりました。けれど、実際に表示される 場合、立体ぽく見せるためには、このほかに光源計算というものを利用するの です。つまり、物体のてかり具合とかかげり具合を計算しないと、たとえ配置 する座標が決まっていても立体ぽく見えないわけです。

さて、立体ぽく見せるための光源計算とはどのように行うのかの基本部分だけ 説明しましょう。光は基本的にまっすぐ進みます。従って、光の方向をベクト ルに置き換えることが出来ます。

#ref(fig2_2.gif,center)

その光がまっすぐ面にあたれば、もっとも光の影響を受けるということになり、 光に対して並行であれば、もっとも光の影響を受けないということになります。 そのために利用するのが、各面の法線ベクトルです。光のベクトルと法線ベク トルを内積という計算を利用して光のその面に対する影響量を算出します。 User’s Guideの63ページにある(2)光源ベクトルと法線ベクトルの内積を とるというのがそれにあたります。ただ、法線ベクトルは、先述しましたよう に、表方向と裏方向の2つがありますので、法線ベクトルがうまく設定されて いないと、裏返ってみえたりする問題が生じてくるわけです。

#ref(fig2_3.gif,center)

ところで、光も立方体も、どこにあるかが決まってないといけませんよね?そ のために、先程使ったローカル -> ワールド変換マトリックスが必要となるわ けです。

以上が3次元物体を描画するための基本概念です。このほかにも視点やスクリー ンの設定、プロジェクションなどありますが、座標変換や光源計算などにくら べて直感的なので、分かりやすいかと思います。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy