(57)【特許請求の範囲】
【請求項１】
拡散反射係数と、対象の拡散色と、光源の色と、前記対象の単位法線ベクトルと前記対象から光源への単位ベクトルの内積値とから拡散反射色を計算し、
鏡面反射係数と、前記対象の鏡面色と、前記光源の色と、前記対象の単位法線ベクトルと前記対象から光源への単位ベクトルの内積値と、前記対象から視点への単位ベクトルと前記対象の単位法線ベクトルの内積値と、前記対象から視点への単位ベクトルと前記対象から光源への単位ベクトルの内積値とから鏡面反射色を計算し、
前記拡散反射色と前記鏡面反射色を加算して前記対象の反射色を計算する色計算部とを有する図形描画装置において、
平行光源で、かつ、平行投影のときに、前記対象の単位法線ベクトルと前記対象から光源への単位ベクトルの内積値と、前記対象から視点への単位ベクトルと前記対象の単位法線ベクトルの内積値と、前記対象から視点への単位ベクトルと前記対象から光源への単位ベクトルの内積値とをそれぞれ保持する内積保存部を備え、
前記色計算部は、前記保持した各内積値を繰り返し使用することを特徴とした図形描画装置。
【請求項２】
前記対象の単位法線ベクトルと前記対象から光源への単位ベクトルの内積値は、前記拡散反射色の計算で求めた値を前記内積保存部に保持し、
前記鏡面反射色の計算で再利用することを特徴とした請求項１記載の図形描画装置。
【請求項３】
前記対象から視点への単位ベクトルと前記対象の単位法線ベクトルの内積値は、前記鏡面反射色の計算時、前記平行光源が複数定義されている場合、ある頂点で一度求めた値を前記内積保存部に保持し、全ての前記平行光源での色計算にこの値を使用することを特徴とした請求項１記載の図形描画装置。
【請求項４】
前記対象から視点への単位ベクトルと前記対象から光源への単位ベクトルの内積値は、ある光源で一度求めた値を前記内積保存部に保持し、全ての頂点の前記鏡面反射色の計算でこの値を使用することを特徴とした請求項１記載の図形描画装置。
【請求項５】
ある図形の各頂点で前記拡散反射係数Ｋｄと前記対象の拡散色Ｏｄが同じであるとき、前記頂点毎の色計算の前にＫｄ×Ｏｄを計算した値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用することを特徴とした請求項１記載の図形描画装置。
【請求項６】
前記平行光源が一個のみのとき、前記Ｋｄ×Ｏｄの値にさらに前記光源の色Ｌｃを乗じた値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用することを特徴とした請求項５記載の図形描画装置。
【請求項７】
ある図形の各頂点で前記鏡面反射係数Ｋｓと前記対象の鏡面色Ｏｓが同じであるとき、前記頂点毎の色計算の前にＫｓ×Ｏｓを計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用することを特徴とした請求項１記載の図形描画装置。
【請求項８】
前記平行光源が一個のみのとき、前記Ｋｓ×Ｏｓの値にさらに前記光源の色Ｌｃを乗じた値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用することを特徴とした請求項７記載の図形描画装置。
【請求項９】
ある図形の各頂点で前記拡散反射係数Ｋｄが同じで、かつ、前記光源の色Ｌｃの平行光源が一個であるとき、前記頂点毎の色計算の前にＫｄ×Ｌｃを計算した値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用することを特徴とした請求項１記載の図形描画装置。
【請求項１０】
ある図形の各頂点で前記鏡面反射係数Ｋｓが同じで、かつ、前記光源の色Ｌｃの平行光源が一個であるとき、前記頂点毎の色計算の前にＫｓ×Ｌｃを計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用することを特徴とした請求項１記載の図形描画装置。
【請求項１１】
ある図形の各頂点で前記対象の単位法線ベクトルが同じであるとき、前記頂点毎の色計算の前に、前記対象から視点への単位ベクトルと前記対象の単位法線ベクトルの内積を計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用することを特徴とした請求項１記載の図形描画装置。
【請求項１２】
ある図形の各頂点で前記対象の単位法線ベクトルが同じで、かつ、前記平行光源が一個であるとき、前記頂点毎の色計算の前に、前記対象の単位法線ベクトルと前記対象から光源への単位ベクトルの内積を計算した値を保持しておき、全ての前記頂点の前記拡散反射色及び前記鏡面反射色の計算でこの値を使用することを特徴とした請求項１記載の図形描画装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータグラフィックス分野の図形描画装置に関する。
描画処理において、色計算は計算量が多いため大きなウエイトを占める。さらに、コンピュータグラフィックスは多くの分野で利用されるようになり、より高速な描画処理が望まれている。
【０００２】
【従来の技術】
図４は反射色計算の説明図であり、図４（ａ）は拡散反射の反射モデル図、図４（ｂ）は鏡面反射の反射モデル図、図４（ｃ）は色計算に使用するベクトルの説明である。
【０００３】
図４（ａ）において、拡散反射の反射光は、入射光に対して全ての方向に散乱される光である。
図４（ｂ）において、鏡面反射の反射光は、物体とのなす角度αの入射光が物体表面から反射される光である。なお、点線で示す広がりＯｅは反射光の鏡面集中度を示している。この鏡面集中度Ｏｅは、その値が大きくなると集中度が良くなり広がりの幅が小さくなる。
【０００４】
図４（ｃ）において、色計算に使用するベクトルを示しており、対象物体から光源方向への単位ベクトルをＶｌ、対象物体から法線方向への単位ベクトルをＶｎ、対象物体から正反射方向への単位反射ベクトルをＶｒ、対象物体から視線（視点）方向への単位ベクトルをＶｅとする。
【０００５】
（１）：色計算の説明
コンピュータグラフィックスにおいて、平行光源に対する物体の反射色は、一般的に以下のようにして計算する。なお、＊は積を示している。
【０００６】
物体の反射色＝拡散反射色＋鏡面反射色・・・・・・・・・・・・・・式１
拡散反射色＝Ｋｄ＊Ｏｄ＊Ｌｃ＊DotProduct（Ｖｎ，Ｖｌ）・・・・・式２
鏡面反射色＝Ｋｓ＊Ｏｓ＊Ｌｃ＊DotProduct（Ｖｅ，Ｖｒ）Oe・・・・式３
Ｖｒ＝２＊DotProduct（Ｖｎ，Ｖｌ）＊Ｖｎ−Ｖｌ・・・・・・・・・式４
ここで、
Ｋｄ：拡散反射係数
Ｋｓ：鏡面反射係数
Ｏｄ：対象の拡散色
Ｏｓ：対象の鏡面色
Ｏｅ：対象の鏡面集中度
Ｌｃ：光源の色
Ｖｎ：対象の単位法線ベクトル
Ｖｌ：対象から光源への単位ベクトル
Ｖｅ：対象から視点への単位ベクトル
Ｖｒ：対象からの単位反射ベクトル
DotProduct（ａ，ｂ）：ベクトルａとベクトルｂの内積
この色計算を図形の各頂点（例えば、図形が３角形であれば３つの頂点）に対して行ない、計算された色を線形補間して描画（スキャン）することによって、平行光源に対する物体の反射を表現できる。また、平行光源が複数定義されているときは、各光源に対して色計算を行ない、それぞれの和をとるようにする。
【０００７】
（２）：平行光源に対する色計算の流れの説明
図５は従来の平行光源に対する色計算の流れの説明図である。以下、図５の処理Ｓ２１〜処理Ｓ２８に従って説明する。なお、「Ｗ」は、繰り返しを意味している。
【０００８】
Ｓ２１：図形の全ての頂点に対して処理Ｓ２２と処理Ｓ２３を繰り返す。
Ｓ２２：反射色の合計をクリアする。
Ｓ２３：全ての平行光源に対して処理Ｓ２４〜処理Ｓ２８を繰り返す。
【０００９】
Ｓ２４：拡散反射色を次のようにして計算する。
拡散反射色＝Ｋｄ＊Ｏｄ＊Ｌｃ＊DotProduct（Ｖｎ，Ｖｌ）
Ｓ２５：対象からの単位反射ベクトルＶｒを次のようにして計算する。
【００１０】
Ｖｒ＝２＊DotProduct（Ｖｎ，Ｖｌ）＊Ｖｎ−Ｖｌ
Ｓ２６：鏡面反射色を次のようにして計算する。
鏡面反射色＝Ｋｓ＊Ｏｓ＊Ｌｃ＊DotProduct（Ｖｅ，Ｖｒ）Oe
Ｓ２７：前記処理Ｓ２４と処理Ｓ２６より次のように反射色を計算する。
【００１１】
反射色＝拡散反射色＋鏡面反射色
Ｓ２８：前の反射色の合計に今回の反射色を加算する。
反射色の合計＋＝反射色（反射色の合計＝反射色の合計＋反射色）
【００１２】
【発明が解決しようとする課題】
前記のような従来のものにおいては、色計算の計算量が多いため、描画処理において大きなウエイトを占めていた。
本発明は、このような従来の課題を解決し、ある図形の平行光源に対する反射色の計算を、高速にできるようにすることを目的とする。
【００１３】
【課題を解決するための手段】
図１は本発明の原理説明図であり、図１（ａ）は装置構成の説明、図１（ｂ）は色計算に使用するベクトルの説明である。図１中、１はモデリング変換部、２は色計算部、３ａは内積保存部、６は視野変換部、７はクリッピング部、８はデプスキューイング部、９は描画部、１０ａは表示部、Ｖｌは対象から光源への単位ベクトル、Ｖｎは対象から法線方向への単位法線ベクトル、Ｖｒは対象から正反射方向への単位反射ベクトル、Ｖｅは対象から視点への単位ベクトルである。
【００１４】
本発明は前記従来の課題を解決するため次のように構成した。
（１）：拡散反射係数と、対象の拡散色と、光源の色と、前記対象の単位法線ベクトルＶｎと対象から光源への単位ベクトルＶｌの内積値とから拡散反射色を計算し、鏡面反射係数と、前記対象の鏡面色と、前記光源の色と、前記対象の単位法線ベクトルＶｎと前記対象から光源への単位ベクトルＶｌの内積値と、前記対象から視点への単位ベクトルＶｅと前記対象の単位法線ベクトルＶｎの内積値と、前記対象から視点への単位ベクトルＶｅと前記対象から光源への単位ベクトルＶｌの内積値とから鏡面反射色を計算し、前記拡散反射色と前記鏡面反射色を加算して前記対象の反射色を計算する色計算部２とを有する図形描画装置において、平行光源で、かつ、平行投影のときに、前記対象の単位法線ベクトルＶｎと前記対象から光源への単位ベクトルＶｌの内積値と、前記対象から視点への単位ベクトルＶｅと前記対象の単位法線ベクトルＶｎの内積値と、前記対象から視点への単位ベクトルＶｅと前記対象から光源への単位ベクトルＶｌの内積値とをそれぞれ保持する内積保存部３ａを備え、前記色計算部２は、前記保持した前記各内積値を繰り返し使用する。
【００１５】
（２）：前記（１）の図形描画装置において、前記対象の単位法線ベクトルＶｎと前記対象から光源への単位ベクトルＶｌの内積値は、前記拡散反射色の計算で求めた値を前記内積保存部３ａに保持し、前記鏡面反射色の計算で再利用する。
【００１６】
（３）：前記（１）の図形描画装置において、前記対象から視点への単位ベクトルＶｅと前記対象の単位法線ベクトルＶｎの内積値は、前記鏡面反射色の計算時、前記平行光源が複数定義されている場合、ある頂点で一度求めた値を前記内積保存部３ａに保持し、全ての前記平行光源での色計算にこの値を使用する。
【００１７】
（４）：前記（１）の図形描画装置において、前記対象から視点への単位ベクトルＶｅと前記対象から光源への単位ベクトルＶｌの内積値は、ある光源で一度求めた値を前記内積保存部３ａに保持し、全ての頂点の前記鏡面反射色の計算でこの値を使用する。
【００１８】
（５）：前記（１）の図形描画装置において、ある図形の各頂点で前記拡散反射係数Ｋｄと前記対象の拡散色Ｏｄが同じであるとき、前記頂点毎の色計算の前にＫｄ×Ｏｄを計算した値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用する。
【００１９】
（６）：前記（５）の図形描画装置において、前記平行光源が一個のみのとき、前記Ｋｄ×Ｏｄの値にさらに前記光源の色Ｌｃを乗じた値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用する。
【００２０】
（７）：前記（１）の図形描画装置において、ある図形の各頂点で前記鏡面反射係数Ｋｓと前記対象の鏡面色Ｏｓが同じであるとき、前記頂点毎の色計算の前にＫｓ×Ｏｓを計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用する。
【００２１】
（８）：前記（７）の図形描画装置において、前記平行光源が一個のみのとき、前記Ｋｓ×Ｏｓの値にさらに前記光源の色Ｌｃを乗じた値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用する。
【００２２】
（９）：前記（１）の図形描画装置において、ある図形の各頂点で前記拡散反射係数Ｋｄが同じで、かつ、前記光源の色Ｌｃの平行光源が一個であるとき、前記頂点毎の色計算の前にＫｄ×Ｌｃを計算した値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用する。
【００２３】
（１０）：前記（１）の図形描画装置において、ある図形の各頂点で前記鏡面反射係数Ｋｓが同じで、かつ、前記光源の色Ｌｃの平行光源が一個であるとき、前記頂点毎の色計算の前にＫｓ×Ｌｃを計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用する。
【００２４】
（１１）：前記（１）の図形描画装置において、ある図形の各頂点で前記対象の単位法線ベクトルＶｎが同じであるとき、前記頂点毎の色計算の前に、前記対象から視点への単位ベクトルＶｅと前記対象の単位法線ベクトルＶｎの内積を計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用する。
【００２５】
（１２）：前記（１）の図形描画装置において、ある図形の各頂点で前記対象の単位法線ベクトルＶｎが同じで、かつ、前記平行光源が一個であるとき、前記頂点毎の色計算の前に、前記対象の単位法線ベクトルＶｎと前記対象から光源への単位ベクトルＶｌの内積を計算した値を保持しておき、全ての前記頂点の前記拡散反射色及び前記鏡面反射色の計算でこの値を使用する。
【００２６】
（作用）
前記構成に基づく作用を説明する。
色計算部２で物体の反射色を計算する図形描画装置において、平行光源で、かつ、平行投影のときに、内積保存部３ａに、対象の単位法線ベクトルＶｎと対象から光源への単位ベクトルＶｌの内積値と、対象から視点への単位ベクトルＶｅと前記対象の単位法線ベクトルＶｎの内積値と、前記対象から視点への単位ベクトルＶｅと前記対象から光源への単位ベクトルＶｌの内積値とをそれぞれ保持し、前記色計算部２は、前記各内積値を繰り返し使用する。このため、色計算の処理量を削減することができ、描画処理を高速化することができる。
【００２７】
また、前記対象の単位法線ベクトルＶｎと前記対象から光源への単位ベクトルＶｌの内積値は、前記拡散反射色の計算で求めた値を前記内積保存部３ａに保持し、前記鏡面反射色の計算で再利用する。このため、前記鏡面反射色の計算を高速化することができる。
【００２８】
さらに、前記対象から視点への単位ベクトルＶｅと前記対象の単位法線ベクトルＶｎの内積値は、前記鏡面反射色の計算時、平行光源が複数定義されている場合、ある頂点で一度求めた値を前記内積保存部３ａに保持し、全ての平行光源での色計算にこの値を使用する。このため、平行光源が複数定義されている場合の前記鏡面反射色の計算を高速化することができる。
【００２９】
また、前記対象から視点への単位ベクトルＶｅと前記対象から光源への単位ベクトルＶｌの内積値は、ある光源で一度求めた値を前記内積保存部３ａに保持し、全ての頂点の前記鏡面反射色の計算でこの値を使用する。このため、前記鏡面反射色の計算をより高速化することができる。
【００３０】
さらに、ある図形の各頂点で前記拡散反射係数Ｋｄと前記対象の拡散色Ｏｄが同じであるとき、前記頂点毎の色計算の前にＫｄ×Ｏｄを計算した値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用する。このため、前記拡散反射色の計算を高速化することができる。
【００３１】
また、前記平行光源が一個のみのとき、前記Ｋｄ×Ｏｄの値にさらに前記光源の色Ｌｃを乗じた値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用する。このため、この時の前記拡散反射色の計算を高速化することができる。
【００３２】
さらに、ある図形の各頂点で前記鏡面反射係数Ｋｓと前記対象の鏡面色Ｏｓが同じであるとき、前記頂点毎の色計算の前にＫｓ×Ｏｓを計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用する。このため、この時の前記鏡面反射色の計算を高速化することができる。
【００３３】
また、前記平行光源が一個のみのとき、前記Ｋｓ×Ｏｓの値にさらに前記光源の色Ｌｃを乗じた値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用する。このため、この時の前記鏡面反射色の計算を高速化することができる。
【００３４】
さらに、ある図形の各頂点で前記拡散反射係数Ｋｄが同じで、かつ、前記光源の色Ｌｃの平行光源が一個であるとき、前記頂点毎の色計算の前にＫｄ×Ｌｃを計算した値を保持しておき、全ての前記頂点の前記拡散反射色の計算でこの値を使用する。このため、この時の前記拡散反射色の計算を高速化することができる。
【００３５】
また、ある図形の各頂点で前記鏡面反射係数Ｋｓが同じで、かつ、前記光源の色Ｌｃの平行光源が一個であるとき、前記頂点毎の色計算の前にＫｓ×Ｌｃを計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用する。このため、この時の前記鏡面反射色の計算を高速化することができる。
【００３６】
さらに、ある図形の各頂点で前記対象の単位法線ベクトルＶｎが同じであるとき、前記頂点毎の色計算の前に、前記対象から視点への単位ベクトルＶｅと前記対象の単位法線ベクトルＶｎの内積を計算した値を保持しておき、全ての前記頂点の前記鏡面反射色の計算でこの値を使用する。このため、この時の前記鏡面反射色の計算を高速化することができる。
【００３７】
また、ある図形の各頂点で前記対象の単位法線ベクトルＶｎが同じで、かつ、前記平行光源が一個であるとき、前記頂点毎の色計算の前に、前記対象の単位法線ベクトルＶｎと前記対象から光源への単位ベクトルＶｌの内積を計算した値を保持しておき、全ての前記頂点の前記拡散反射色及び前記鏡面反射色の計算でこの値を使用する。このため、この時の前記拡散反射色及び前記鏡面反射色の計算を高速化することができる。
【００３８】
【発明の実施の形態】
図２、図３は本発明の実施の形態を示した図であり、図２は図形描画装置の説明図、図３は平行光源に対する色計算の流れの説明図である。以下、図面に基づいて本発明の実施の形態を説明する。
【００３９】
（１）：図形描画装置の説明
図２において、図形描画装置には、モデリング変換部１、色計算部２、内積１保存部３、内積２保存部４、内積３保存部５、視野変換部６、クリッピング部７、デプスキューイング部８、描画部９、ＣＲＴ１０が設けてある。
【００４０】
モデリング変換部１は、入力された図形の各頂点を色計算のために、図形が定義されているモデリング座標系ＭＣから光源が定義されている世界座標系ＷＣに変換するものである。
【００４１】
色計算部２は、世界座標系ＷＣに変換された図形の各頂点とあらかじめ定義された光源から反射色を計算する。このとき、視野変換が平行投影、かつ、平行光源であるなら本願手法（後で詳述する）の高速計算を行う。光源が平行光源以外のものを含むときは、平行光源を本願手法で計算し、他の光源を従来の手法で計算し、最後に和をとるものである。
【００４２】
内積１保存部３は、内積１〔＝DotProduct（Ｖｎ，Ｖｌ）〕を保存するものである。内積２保存部４は、内積２〔＝DotProduct（Ｖｅ，Ｖｎ）〕を保存するものである。内積３保存部５は、内積３〔＝DotProduct（Ｖｅ，Ｖｌ）〕を保存するもので、全ての平行光源に対して平行光源数だけ設けてある。
【００４３】
視野変換部６は、各頂点の座標を世界座標系ＷＣからデバイス座標系ＤＣに変換するものである。クリッピング部７は、図形をクリッピング枠でクリッピングするものである。デプスキューイング部８は、各座標値のＺ値（奥行き値）に応じて各頂点の色を変更する（例えば、奥に行くほど暗くする）。
【００４４】
描画部９は、図形の頂点色を線形補間しながらＣＲＴに描画するものである。ＣＲＴ１０は、陰極線管を使用した表示部である。
なお、図２の例において、色計算部２は、他の処理部と独立しているので、これらの処理部にサブセット（例えば、デプスキューイング部８を省略した装置にする等）、あるいは、別の組み合わせ（例えば、クリッピング部７とデプスキューイング部８の処理順序を逆にする等）の応用が可能である。
【００４５】
（２）：描画処理の高速化の説明
この発明は、ある図形の平行光源に対する反射色の計算を、従来の計算より高速化するものである。まず、高速化を行う条件を定義する。
【００４６】
（条件１）光源は、平行光源である。
（条件２）平行投影である（視点が無限遠点にある）。
この条件から、前記式１〜式４の成分に対して、次のことが言える。
【００４７】
（ａ）：前記条件１から、対象から光源への単位ベクトルＶｌは全ての頂点で同じである。
（ｂ）：前記条件２から、対象から視点への単位ベクトルＶｅは全ての頂点で同じである。
【００４８】
次に、前記式３のDotProduct（Ｖｅ，Ｖｒ）を、前記式４を用いて展開し、次のように変形する。
DotProduct（Ｖｅ，Ｖｒ）＝２＊DotProduct（Ｖｎ，Ｖｌ）＊DotProduct（Ｖｅ，Ｖｎ）−DotProduct（Ｖｅ，Ｖｌ）・・・・・・・・・・・・・・・式５
この式５を分析すると、次のことがわかる。
【００４９】
（Ａ）DotProduct（Ｖｎ，Ｖｌ）は、前記式２でも現れる。
（Ｂ）DotProduct（Ｖｅ，Ｖｎ）は、光源には無関係である。
（Ｃ）DotProduct（Ｖｅ，Ｖｌ）は、ある光源においては全ての頂点で同じ値になる。
【００５０】
以上のことから、色計算の処理量を以下のような手法により削減する。
（ａ）：前記（Ａ）から、
拡散反射色の計算において、この項〔DotProduct（Ｖｎ，Ｖｌ）〕の値を保持しておき、鏡面反射色の計算で再利用する。
【００５１】
（ｂ）：前記（Ｂ）から、
複数の光源に対し、各光源毎に計算する必要がないため、一度計算した値を保持しておき、全ての平行光源に対する計算時にこの値を使用することができる。
【００５２】
（ｃ）：前記（Ｃ）から、
一度計算した値を保持しておき、同一平面上にある一つの図形面を構成する全ての頂点の計算の際にこの値を使用することができる。
【００５３】
以上の手法を実施することにより、描画処理が高速化できる。
（３）：色計算の流れの説明
図３は平行光源に対する色計算の流れの説明図である。以下、図３の処理Ｓ１〜処理Ｓ１６に従って説明する。ここでは、平行光源数をｎとし、平行光源ｉ＝０、１、・・・ｎ−１とする。
【００５４】
Ｓ１：色計算部２は、平行投影かどうかを判断する。
Ｓ２：色計算部２は、前記処理Ｓ１の判断で、平行投影でない場合は従来の計算方法により色計算を行ない、この処理を終了する。
【００５５】
Ｓ３：色計算部２は、前記処理Ｓ１の判断で、平行投影の場合は、全ての平行光源に対して処理Ｓ４と処理Ｓ５を繰り返す（平行光源ｉ＝０、１、・・・ｎ−１の平行光源数ｎ回繰り返す）。
【００５６】
Ｓ４：色計算部２は、各平行光源に対して次の内積３の計算をする。
内積３［ｉ］＝DotProduct（Ｖｅ，Ｖｌ）
Ｓ５：色計算部２は、前記処理Ｓ４で計算した内積３［ｉ］を内積３保存部５に保存する。
【００５７】
Ｓ６：色計算部２は、図形の全ての頂点に対して処理Ｓ７〜処理Ｓ１０を繰り返す。
Ｓ７：色計算部２は、反射色の合計をクリアする。
【００５８】
Ｓ８：色計算部２は、次の内積２の計算をする。
内積２＝DotProduct（Ｖｅ，Ｖｎ）
Ｓ９：色計算部２は、前記処理Ｓ８で計算した内積２を内積２保存部４に保存する。
【００５９】
Ｓ１０：色計算部２は、全ての平行光源に対して処理Ｓ１１〜処理Ｓ１６を繰り返す（ｎ＝平行光源数；ｉ＝０、１、・・・ｎ−１）。
Ｓ１１：色計算部２は、次の内積１の計算をする。
【００６０】
内積１＝DotProduct（Ｖｎ，Ｖｌ）
Ｓ１２：色計算部２は、前記処理Ｓ１１で計算した内積１を内積１保存部３に保存する。
【００６１】
Ｓ１３：色計算部２は、内積１保存部３の内積１を使用して拡散反射色を次のように計算する。
拡散反射色＝Ｋｄ＊Ｏｄ＊Ｌｃ＊内積１
Ｓ１４：色計算部２は、内積１保存部３の内積１、内積２保存部４の内積２、内積３保存部５の内積３［ｉ］を使用して鏡面反射色を次のように計算する。
【００６２】
鏡面反射色＝Ｋｓ＊Ｏｓ＊Ｌｃ＊（２＊内積１＊内積２−内積３［ｉ］）Oe
Ｓ１５：色計算部２は、前記処理Ｓ１４と処理Ｓ１５の計算結果から次のように反射色を計算する。
【００６３】
反射色＝拡散反射色＋鏡面反射色
Ｓ１６：色計算部２は、前の反射色の合計に今回の反射色を加算する。全部で平行光源数ｎ回の反射色の合計を行って、一つの頂点の処理が終了することになる。
【００６４】
反射色の合計＋＝反射色（反射色の合計＝反射色の合計＋反射色）
（４）：他の実施の形態
ａ：ある図形の各頂点で拡散反射係数Ｋｄと拡散色Ｏｄが同じであるとき、頂点毎の色計算の前にＫｄ×Ｏｄを計算した値を保存部（図示せず）に保持し、全ての頂点の拡散反射色の計算でこの値を使用することができる。このように、一つの面では材質が同じでしかも拡散反射係数Ｋｄと拡散色Ｏｄが同じことが多いため、この時の拡散反射色の計算を高速化することができる。
【００６５】
ｂ：ある図形の各頂点で鏡面反射係数Ｋｓと鏡面色Ｏｓが同じであるとき、頂点毎の色計算の前にＫｓ×Ｏｓを計算した値を保存部（図示せず）に保持し、全ての頂点の鏡面反射色の計算でこの値を使用することができる。このように、一つの面では材質が同じで鏡面反射係数Ｋｓと鏡面色Ｏｓが同じことが多いため、この時の鏡面反射色の計算を高速化することができる。
【００６６】
ｃ：平行光源が一個のみのときで、拡散反射係数Ｋｄと拡散色Ｏｄが同じであるとき、Ｋｄ×Ｏｄの値に光源の色Ｌｃを乗じた値を保存部（図示せず）に保持し、全ての頂点の拡散反射色の計算でこの値を使用することができる。このため、この時の拡散反射色の計算を高速化することができる。
【００６７】
ｄ：平行光源が一個のみのときで、鏡面反射係数Ｋｓと鏡面色Ｏｓが同じであるとき、Ｋｓ×Ｏｓの値に光源の色Ｌｃを乗じた値を保存部（図示せず）に保持し、全ての頂点の鏡面反射色の計算でこの値を使用することができる。このため、この時の鏡面反射色の計算を高速化することができる。
【００６８】
ｅ：ある図形の各頂点で拡散反射係数Ｋｄが同じで、かつ、平行光源が一個であるとき、頂点毎の色計算の前にＫｄ×Ｌｃを計算した値を保存部（図示せず）に保持し、全ての頂点の拡散反射色の計算でこの値を使用することができる。このため、この時の拡散反射色の計算を高速化することができる。
【００６９】
ｆ：ある図形の各頂点で鏡面反射係数Ｋｓが同じで、かつ、平行光源が一個であるとき、頂点毎の色計算の前にＫｓ×Ｌｃを計算した値を保存部（図示せず）に保持し、全ての頂点の鏡面反射色の計算でこの値を使用することができる。このため、この時の鏡面反射色の計算を高速化することができる。
【００７０】
ｇ：ある図形の各頂点で単位法線ベクトルＶｎが同じであるとき、頂点毎の色計算の前にDotProduct（Ｖｅ，Ｖｎ）を計算した値を保存部（図示せず）に保持し、全ての頂点の鏡面反射色の計算でこの値を使用することができる。このため、この時の鏡面反射色の計算を高速化することができる。
【００７１】
ｈ：ある図形の各頂点で単位法線ベクトルＶｎが同じで、かつ、平行光源が一個であるとき、頂点毎の色計算の前にDotProduct（Ｖｎ，Ｖｌ）を計算した値を保存部（図示せず）に保持し、全ての頂点の拡散反射色及び鏡面反射色の計算でこの値を使用することができる。このため、この時の拡散反射色及び鏡面反射色の計算を高速化することができる。
【００７２】
【発明の効果】
以上説明したように、本発明によれば次のような効果がある。
（１）：色計算部で物体の反射色を計算する図形描画装置において、平行光源で、かつ、平行投影のときに、内積保存部に、対象の単位法線ベクトルＶｎと対象から光源への単位ベクトルＶｌの内積値と、対象から視点への単位ベクトルＶｅと対象の単位法線ベクトルＶｎの内積値と、対象から視点への単位ベクトルＶｅと対象から光源への単位ベクトルＶｌの内積値とをそれぞれ保持し、前記色計算部は、前記各内積値を繰り返し使用するため、色計算の処理量を削減することができ、描画処理を高速化することができる。
【００７３】
（２）：対象の単位法線ベクトルＶｎと対象から光源への単位ベクトルＶｌの内積値は、拡散反射色の計算で求めた値を内積保存部に保持し、鏡面反射色の計算で再利用するため、鏡面反射色の計算を高速化することができる。
【００７４】
（３）：対象から視点への単位ベクトルＶｅと対象の単位法線ベクトルＶｎの内積値は、鏡面反射色の計算時、平行光源が複数定義されている場合、ある頂点で一度求めた値を内積保存部に保持し、全ての平行光源での色計算にこの値を使用するため、平行光源が複数定義されている場合の鏡面反射色の計算を高速化することができる。
【００７５】
（４）：対象から視点への単位ベクトルＶｅと対象から光源への単位ベクトルＶｌの内積値は、ある光源で一度求めた値を内積保存部に保持し、全ての頂点の鏡面反射色の計算でこの値を使用するため、鏡面反射色の計算をより高速化することができる。
【００７６】
（５）：ある図形の各頂点で拡散反射係数Ｋｄと対象の拡散色Ｏｄが同じであるとき、頂点毎の色計算の前にＫｄ×Ｏｄを計算した値を保持しておき、全ての頂点の拡散反射色の計算でこの値を使用するため、この時の拡散反射色の計算を高速化することができる。
【００７７】
（６）：平行光源が一個のみのとき、Ｋｄ×Ｏｄの値にさらに光源の色Ｌｃを乗じた値を保持しておき、全ての頂点の拡散反射色の計算でこの値を使用するため、この時の拡散反射色の計算を高速化することができる。
【００７８】
（７）：ある図形の各頂点で鏡面反射係数Ｋｓと対象の鏡面色Ｏｓが同じであるとき、頂点毎の色計算の前にＫｓ×Ｏｓを計算した値を保持しておき、全ての頂点の鏡面反射色の計算でこの値を使用するため、この時の鏡面反射色の計算を高速化することができる。
【００７９】
（８）：平行光源が一個のみのとき、Ｋｓ×Ｏｓの値にさらに光源の色Ｌｃを乗じた値を保持しておき、全ての頂点の鏡面反射色の計算でこの値を使用するため、この時の鏡面反射色の計算を高速化することができる。
【００８０】
（９）：ある図形の各頂点で拡散反射係数Ｋｄが同じで、かつ、光源の色Ｌｃの平行光源が一個であるとき、頂点毎の色計算の前にＫｄ×Ｌｃを計算した値を保持しておき、全ての頂点の拡散反射色の計算でこの値を使用するため、この時の拡散反射色の計算を高速化することができる。
【００８１】
（１０）：ある図形の各頂点で鏡面反射係数Ｋｓが同じで、かつ、光源の色Ｌｃの平行光源が一個であるとき、頂点毎の色計算の前にＫｓ×Ｌｃを計算した値を保持しておき、全ての頂点の鏡面反射色の計算でこの値を使用するため、この時の鏡面反射色の計算を高速化することができる。
【００８２】
（１１）：ある図形の各頂点で対象の単位法線ベクトルＶｎが同じであるとき、頂点毎の色計算の前に、対象から視点への単位ベクトルＶｅと対象の単位法線ベクトルＶｎの内積を計算した値を保持しておき、全ての頂点の鏡面反射色の計算でこの値を使用するため、この時の鏡面反射色の計算を高速化することができる。
【００８３】
（１２）：ある図形の各頂点で対象の単位法線ベクトルＶｎが同じで、かつ、平行光源が一個であるとき、頂点毎の色計算の前に、対象の単位法線ベクトルＶｎと対象から光源への単位ベクトルＶｌの内積を計算した値を保持しておき、全ての頂点の拡散反射色及び鏡面反射色の計算でこの値を使用するため、この時の拡散反射色及び鏡面反射色の計算を高速化することができる。
【図面の簡単な説明】
【図１】本発明の原理説明図である。
【図２】実施の形態における図形描画装置の説明図である。
【図３】実施の形態における平行光源に対する色計算の流れの説明図である。
【図４】反射色計算の説明図である。
【図５】従来の平行光源に対する色計算の流れの説明図である。
【符号の説明】
１  モデリング変換部
２  色計算部
３ａ  内積保存部
６  視野変換部
７  クリッピング部
８  デプスキューイング部
９  描画部
１０ａ  表示部
Ｖｌ  対象から光源への単位ベクトル
Ｖｎ  対象から法線方向への単位法線ベクトル
Ｖｒ  対象から正反射方向への単位反射ベクトル
Ｖｅ  対象から視点への単位ベクトル
【図１】
0003762487.tif 000002
【図２】
0003762487.tif 000003
【図３】
0003762487.tif 000004
【図４】
0003762487.tif 000005
【図５】
0003762487.tif 000006