ベクトル ( 頂点 )

解説

ベクトル(頂点)データは、グラフィックスプログラミングの核となるデータです。

ベクトル(頂点)データをプログラム上でどう扱うかに関しては、いくつかの選択肢があります。

プログラムの規模(コード量、開発者の数)やプログラムの要求(処理速度、安定度、開発速度)に応じて、どう扱うかを選択します。

基本型データ配列

要素数3の浮動小数型、整数型の配列を用意し、1番目の要素をX座標値、2番目の要素をY座標値、3番目の要素をZ座標値を表すとして、プログラミングします。

データ構造

X座標値、Y座標値、Z座標値を表すメンバ変数を持ったデータ構造を作成し、作成したデータ構造を用いてプログラミングします。
基本型データ配列を用いてプログラミングする場合には、X、Y、Zの各座標値は、配列の添え字0、1、2に対応しますが、可読性が低い、タイプミスをする可能性が高いという問題があります。また、配列を用いるということは、配列の境界を越えたアクセスを行ってしまうコードを容易に記述可能である、という問題があります。
データ構造を用いてプログラミングする場合には、X、Y、Zの各座標値は、メンバ変数X、Y、Zに対応し、可読性が高くなり、タイプミスをする可能性も低くなります。配列ではないので、配列の境界を越えたアクセスを行ってしまうコードは容易には記述できないので、より安全なプログラムになります。

クラス

X座標値、Y座標値、Z座標値を表すメンバ変数に加えて、算術演算を行うメンバ関数を持ったクラスを作成し、作成したするクラスを用いてプログラミングします。
データ構造を用いてプログラミングする場合には、オブジェクトの初期化は自動では行われないので、「プログラムの各所で、オブジェクトを初期化する記述をする」ことになります。初期化忘れによる不具合が発生する恐れがあります。また、オブジェクト同士の演算はできず、簡単な演算においても、「プログラムの各所で、オブジェクト内の要素を参照して演算をする記述をする」ことになります。
クラスを用いてプログラミングする場合には、コンストラクタを用意することによりオブジェクトの初期化は自動的に行われます。また、オブジェクト同士の演算をメンバ関数として用意することにより、「プログラムの各所で、オブジェクト内の要素を参照して演算をする記述をする」必要はなくなります。演算に際して参照する要素を隠蔽することで、タイプミスによる不具合の発生を抑止します。
(C++の言語仕様的には、構造体とクラスの違いは、「メンバの前にpublic、protected、privateの指定がないときに、構造体では、メンバはpublicメンバになる、クラスでは、メンバはprivateメンバになる」であり、それ以外の違いはないとなっています。すなわち、言語仕様的には、構造体とクラスには能力的な差はないですが、ここでは、構造体とクラスの一般的な使い分けとして「構造体は、メンバ関数を持たない。クラスはメンバ関数を持つ」としています。)



サンプルクラス定義ファイル

テンプレートクラス

X座標値、Y座標値、Z座標値を表すメンバ変数のデータ型を抽象化したテンプレートクラスを作成し、作成したテンプレートクラスを用いてプログラミングします。
クラスを用いてプログラミングする場合にはデータ型の違うクラスごとにメンバ関数を書かなければなりません。
データ型を抽象化したテンプレートクラスを用いてプログラミングする場合には、メンバ関数をデータ型の違うクラスごとに書く必要はなくなります。



サンプルテンプレートクラス定義ファイル(3次元)

サンプルテンプレートクラス定義ファイル(2次元)