座標系と測定単位

Last Updated 2011/09/21


ワールド座標系

下図は、3D グラフィックスにおけるワールド座標系を示すもので、左上隅を原点とする 2D 座標系とはまったく異なります。特に注意することは座標値がプラス方向に大きくなる向きです。つまり、X 軸は右方向、Y 軸は上方向、Z 軸は画面の手前方向に大きくなります。

3DCoordinate

WPF の 3D グラフィックスにおけるワールド座標系は右手座標系と呼ばれていて、右手の親指、人差し指、中指をそれぞれ、 X 軸、Y 軸、Z 軸になろざえ、親指を X 軸方向のプラス方向に向けると人差し指と中指がそれぞれ Y 軸と Z 軸のプラス方向を向きます。

Note WEB サイトをうろついていると、右手系である点は同じなのですが、それぞれの指の方向はここでの説明とは異なる説明にしているものがみられます。しかし、それは Direct3D のそれであるかもしれないので注意してください。

ローカル座標系

3D モデル(3D 図形)の形状はローカル座標系で定義しますが、3D モデルのワールド座標系内におけるデフォルトの位置は中央(ワールド座標の原点)です。ワールド座標系内における位置を指定する場合は、ModelVisual3D クラスの Transform プロパティを利用します。

測定単位

3D グラフィックスの測定単位は絶対値を使いません。つまり、論理ピクセルでもインチでもない。常に相対値です。したがって、3D オブジェクトを定義する値が 1 でも 10 でも同じ意味でしかありません。もちろん、小数点付きの値でもかまいません。

以下のコードは、赤色の二等辺三角形を定義するものですが、MeshGeometry3D オブジェクトの Positions プロパティの設定は "-1 -1 0, 1 -1 0, 0 1 0" でなくて、 "-10 -10 0, 10 -10 0, 0 10 0" でも同じです。ただし、カメラの位置などの影響を受けるので、同じ状態で表示されるかどうかは分かりません。

<ModelVisual3D>
  <ModelVisual3D.Content>
    <GeometryModel3D>
      <GeometryModel3D.Geometry>
        <MeshGeometry3D Positions="-1 -1 0, 1 -1 0, 0 1 0"
                        TriangleIndices="0,1,2" />
      </GeometryModel3D.Geometry>
      <GeometryModel3D.Material>
        <DiffuseMaterial Brush="Red" />
      </GeometryModel3D.Material>
    </GeometryModel3D>
  </ModelVisual3D.Content>
</ModelVisual3D>

−以上−