3Dグラフィックスの座標系
3Dグラフィックスでは,どこからどこまでが描画空間なのかを示すため直方体を使いプロット空間の境界を定義している.プロットするオブジェクトはこの直方体(ボックスと呼ぶ)の中に置かれ,デフォルトで,ボックスの輪郭に線が描かれるので(Boxed->Trueの設定が有効時)プロット範囲が視覚的に確認できる.また,オブジェクトがボックスの外にはみ出るようなことがあれば,はみ出た部分は表示されない.
ボックスに包含する
,
,
方向の各プロット範囲はオプションPlotRangeを使い指定する.2Dグラフィックスのときのように,デフォルトで自動設定(PlotRange->Automatic)になっており,Mathematica 内部のアルゴリズムで決定した「重要な部分」だけが描画の対象になる.つまり,部分によってはボックスの外に出てしまい表示されないものもある.そのようなことがないように,すべてを描画対象にするならPlotRange->Allと指定しておく.
| Out[3]= |  |
| Out[4]= |  |
2Dグラフィックスと同様に3Dでも「実座標」と「スケールされた座標」のどちらでもオブジェクトの位置指定ができる.スケールされた座標は書式Scaled[{sx, sy, sz}]で指定し,各座標値は0から1の値を取る.ボックスの包含する空間は右手座標系で表される.
| {x,y,z} | プロットする実空間の座標を指定する |
| Scaled[{sx,sy,sz}] | スケールされた座標を指定する.各座標は0から1の値を取る |
3Dオブジェクトの座標指定
| Out[5]= |  |
ボックス内の実空間のどこに何を配置するかを指定したなら,次はボックス自体をどう表示させるか指定する.まず,ボックスの縦,横,そして,奥行き長の相対比を決める.これは,2Dプロットにおける縦横比の指定に相当する.3Dでは,縦横比の代りにボックス比のオプションBoxRatiosを使いボックスの各辺(つまり,座標軸の範囲)の相対的な長さを指定する.Graphics3Dオブジェクトの場合は,デフォルトで自動設定になっているので(BoxRatios->Automatic),比は実座標の範囲から決定される.
3Dオブジェクトにおける境界ボックスの辺の長さ指定

方向にボックスを引き伸ばして星形20面体を表示する.
| Out[6]= |  |
立体の描画では,どの位置からどの角度で物体を眺めるかといった位置関係を設定する必要がある.位置関係を表す値を「ビューポイント」と呼び,これはオプションViewPointを使い指定する.
「3D曲面プロット」に,よくあるビューポイントの設定例を示したので参考にするとよい.しかし,そこにある設定位置にとらわれる必要はなく,どんな設定をしても構わない.
ビューポイントの指定書式はViewPoint->{sx, sy, sz}である.ここで,値 si はボックス中心を原点(
)とした特殊な座標系で与えられる.座標の取る値はボックスの最長辺を1とするスケールされた相対値とする.ボックスの他の辺の長さはボックス比(BoxRatios)から決定される.ボックスが立方体ならば,各座標軸は
から
の範囲を取る.ビューポイントは必ずボックスの外になければいけないことに注意する.
デフォルトのビューポイント指定,つまり,

で図を表示する.
| Out[7]= |  |
ビューポイントを境界ボックスの一角に近付けると図はこのように見える.
| Out[8]= |  |
| Out[9]= |  |
3Dオブジェクトの配置と方向付け
3Dグラフィックスでは,描画するオブジェクトをどこから眺めるかだけでなく,表示領域の中にどうオブジェクトを「枠組み」するかを指定する必要もある.後者の設定ではオプションViewCenter,ViewVertical,ViewAngleを使う.
ViewCenterはオブジェクトのどこの点が表示領域の中心に現れるか指定するために使用する.中心点はスケールされた特殊座標(0から1)で与える.例えば,ViewCenter->{1/2, 1/2, 1/2}と指定すれば,ボックスの中心と表示領域の中心を一致させることになる.ただし,ビューポイントの設定によってはボックスが対照に表示されないため,このViewCenterの設定では必ずしも表示領域の中心にボックスの中心を持っていけない.そのようなときは,自動設定(ViewCenter->Automatic)にした方がよいかもしれない.
次に,ViewVerticalはオブジェクトのどの方向が表示領域で上を向くか指定するのに使う.ViewVerticalの指定は,表示領域上でオブジェクトのどの方向が上を向くかをスケールされた座標で与えることである.デフォルト値はViewVertical->{0, 0, 1}で,これは
軸が表示領域の垂直方向になるよう表示することを意味する.
Mathematica は最終的な画像を可視化するために,シミュレートされたカメラの属性を使用する.カメラの位置,方向,向きはViewCenter,ViewVertical,ViewPointオプションで決まる.ViewAngleオプションは,カメラレンズの開口部の幅を指定する.ViewAngleはカメラで見ることのできるViewPointからViewCenterまで伸びた線からの最大角度をラジアンで指定する.効率的な視野角はViewAngleの値の2倍である.つまり,ViewAngleは画像の一部でズームインするために効果的に使うことができるということである.ViewAngleのデフォルト値は人間の目にとって一般的な視野角である35度である.
| Out[10]= |  |
| Out[11]= |  |
このように,ViewPoint,ViewCenter,ViewVerticalの一連の設定は,物理的なオブジェクトをどう表示するか指示するために使う.ViewPointはオブジェクトを眺める位置を指定し,ViewCenterはオブジェクトのどこを中心に見るかを指定し,また,ViewVerticalは表示上の垂直方向がオブジェクトのどの方向になるかを指定する.
座標系という点において,ViewPoint,ViewCenter,ViewVerticalの条件設定は一種の座標変換とも考えられる.つまり,3つの条件設定を使い,実空間における物体の各座標を表示領域の座標に変換している,とも考えられる.
ViewVectorオプションに可能な値
カメラの位置と向きはViewPointオプションとViewCenterオプションで完全に決めることができる.しかし,ViewVectorオプションは便利な一般化を提供する.ViewVectorではスケールされた座標を使ってカメラの位置と向きを指定する代りに,グラフィックス内でオブジェクトの位置を決めるのに使われる座標系と同じものを使ってカメラの位置を決めることができる.
以下はカメラを負の

軸上に置き,グラフィックスの中心を向くように指定している.
| Out[12]= |  |
これもカメラは同じ位置にあるが,異なる向きを向いている.
ViewAngleを合せると,グラフィックスの特定の場所をズームインする.
| Out[13]= |  |
3Dオブジェクトの2Dのイメージを得たなら,次にそれをどう描画するかを指定する.グラフィックスオプションは2Dグラフィックスで使ったものと同じである.つまり,縦横比のオプションAspectRatioを使い最終表示領域の縦横の尺度を変えたり,プロット領域のオプションPlotRegionを限定し表示面全体のどこの領域にイメージを表示させるか等の指定ができる.
| ドラッグ | 中心についてグラフィックスを回転させる |
| Ctrl+ドラッグ | グラフィックスにズームインしたりズームアウトしたりする |
| Shift+ドラッグ | スクリーン平面でグラフィックスをパンする |
3Dグラフィックスとのインタラクションに使われるマウス操作
グラフィックスをインタラクティブに変更する場合,ビューオプションが変更される.ViewPointを使ってカメラの位置を指定した場合,グラフィックスの回転によりViewPointオプションの値が変更される.ViewVectorを使ってカメラの位置が指定してある場合は,インタラクティブな回転によりそのオプションの値が変化する.どちらの場合も,インタラクティブな回転はViewVerticalオプションの値にも影響を及ぼす.グラフィックスをインタラクティブにズームすることは,ViewAngleオプションの変更と直接呼応する.グラフィックスをインタラクティブにパンすると,ViewCenterオプションの値が変化する.
| Out[14]= |  |
グラフィックスの表示段階で,立体のイメージが描画領域に対してなるべく大きくなるように尺度が調整される.多くのグラフィックスではこの調整処理は好ましいが,オブジェクトの向きによってはイメージの大きさが変わってしまう場合がある.そのような効果が出てしまうときは,SphericalRegion->Trueの条件を指定する.すると,境界ボックスを包含する球が想定され(ボックスの中心と球の中心はマッチする),最終イメージの尺度調整が球に対して行われるようになる.つまり,球全体が表示領域に収まるようスケールされる.
| Out[15]= |  |
| Out[16]= |  |
このように,SphericalRegion->Trueと指定しておくと,オブジェクトの大きさがそのオブジェクトの方向によらず一定となる.1つの立体オブジェクトをいろいろな角度から見たアニメーションを作るときに便利になる.
3Dグラフィックスの表示尺度の調整