3D描画の基礎知識

目次

はじめに

システムで立体を擬似的に三次元空間(3D)をシュミレートした結果は、現段階ではモニターという二次元空間(2D)に出力することになります。立体自体の位置、立体を見る位置(視点)、立体の各面の向き、視点からの奥行方向の前後関係、視点からの距離、光源の位置などを考慮して計算しなければなりません。特にここでは数学の知識が必要になります。 基礎知識がしっかりとしていないと間違った方向に進み思わぬ苦労や失敗になります。
そこで先人の知恵をお借りすべく3D描画について調べたことをまとめました。
ここでも図などをSVGで表示しているので、SVG対応のブラウザーでないと図は表示されません。

3次元モデルの種類

  1. ) ワイヤーフレームモデル
     ワイヤーフレームモデルとは、点と、線分によってのみ、表現されるモデルのことです。このモデルは、データ量は少なく、表示も速いというメリットがあります。また、パソコンなどのディスプレイでも十分表示できます。しかし、面のデータを持っていないため、陰線消去表示を行うことができず、モデルの立体感をつかみにくいという欠点もあります。また、表面積や体積などを求めることもできません。
  2. ) サーフェイスモデル
     サーフェイスモデルとは、点、線分、面によって表現されるモデルのことです。サーフェイスモデルには、平面だけで表される多面体モデルと、複雑な曲面も扱うことのできる曲面モデルがあります。しかし、ハードウェアでは、平面しか表示させることがきないため、いろいろな方法を用いて多面体近似することによって表示しています。また、曲面の特徴線のみを表示するあいそパラメトリック表示などの方法を使用することもあります。サーフェイスモデルは、面データを持つため、陰線消去表示や、シェーディング表示などのレンダリング機能を実現することができます。陰線消去表示をする方法をして、スキャンライン法といって、視点から遠いものより順番にディスプレイに描いていく方法と、デプスバッファという1ピクセルごとのZ座標値を保持するメモリーを使用したデプスバッファ法の2種類があります。サーフェイスモデルでは、表面積を求めることはできますが、中身がないため体積や重さなどを求めることはできません。  サーフェイスモデルのデータ構造は、ワイヤーフレームモデルのデータ構造を拡張したもので、一般的に、頂点テーブル、稜線テーブル、面テーブルによって表されます。サーフェイスモデルは、ワイヤーフレームモデルの拡張されたものと考えられます。
  3. ) ソリッドモデル
     ソリッドモデルとは、ソリッドと呼ばれる中身の入った物体により表現されるモデルのことです。ソリッドモデルは、陰線消去表示や、シェーディング表示はもちろん、体積や重さなどを求めることもできます。  ソリッドモデルのデータ構造には、CSGと、B-repが、あります。
    CSGモデルは、プリミティブと呼ばれる基本要素の組み合わせで、形状を表現します。プリミティブには、直方体、立方体、球、円柱、円錐、角錐などがあります。組み合わせの方法には、和、差、積などがあります。   

座標系

座標は立体をシステムで三次元空間(3D)処理する一番の基本です。

  1. ) 右手座標系と左手座標系 座標系には下図の左手座標系(left-handed coordinate system)と右手座標系(right-handed coordinate system)があります。
     
     
                  左手座標系                              右手座標系
    /* visible/hidden */ /* X axis & Arrow */ /* Y axis & Arrow */ /* Z axis & Arrow */ x y z /* O-x-y */ /* O-y-z */ /* O-z-x */ /* X axis Rotation */ /* Y axis Rotation */ /* Z axis Rotation */ /* visible/hidden */ /* X axis & Arrow */ /* Y axis & Arrow */ /* Z axis & Arrow */ x y z /* O-x-y */ /* O-y-z */ /* O-z-x */ /* X axis Rotation */ /* Y axis Rotation */ /* Z axis Rotation */
     
    人が見たり考える時は普通右手座標系ですが、HTML/SVGでは左手座標系です。従ってWeb上で表示する場合は、右手座標系で計算した結果を左手座標系を考慮した表示への変換が必要になります。図形の場合はy軸の値を+/-を変えるだけでいいのですが、文字の場合上下が逆さにならにように注意が必要です。
     
  2. ) 角度と回転
    上の図のように右手座標系は軸に対して反時計回り、左手座標系は軸に対して時計回りが正です。
    x軸周り:y軸正方向からz軸正方向に向かう回転です。
    y軸周り:z軸正方向からx軸正方向に向かう回転です。
    z軸周り:x軸正方向からy軸正方向に向かう回転です。
    (x → y → zの順です。)
  3. ) ワールド座標系とボディ座標系
    • ワールド座標系
       3次元物体が定義されている座標系をワールド座標系と呼びます。
      下図の例ではx,y,z軸がワールド座標系です。
      ワールド座標系は3次元世界全体を定義する座標系なので、グローバル座標系ともいいます。 /* visible/hidden */ /* visible/hidden */ z' x' y' 0 20 /* X axis & Arrow */ /* Y axis & Arrow */ /* Z axis & Arrow */ x y z
       
      上のViewbox内でマウスを押下した状態で動かしてみて下さい。左右でボディ座標系が回転し、上下でワールド座標系が回転します。
    • ボディ座標系
       ボディ座標系とは、各部品ごとに定義する座標系のことです。 上図の例ではx',y',z'軸がボディ座標系です。ボディ座標系はローカル座標ともいいます。 ここでいう各部品とは立方体や球のように3次元世界の図形のことです。
       ボディ座標系を使うと図形を各部品の中だけで図形の座標を定義し、ワールド座標系に変換するという2段階の操作になりますが、座標を定義する時に各部品に適切な座標で定義出来るので、計算が単純化できます。
       上図の場合、ボディ座標系を回転させ次にワールド座標系を回転させるという2操作で実行しています。
       ボディ座標系からワールド座標系に変換することをモデリング変換(後述)といいます。
       

最終更新のRSS
Last-modified: 2014-03-11 (火) 01:58:42 (3859d)