(57)【特許請求の範囲】
【請求項１】
命令実行型演算処理装置内に設けられる関数発生器であって、
ｍ個（ｍは自然数）の加算器と、少なくとも一つのレジスタとを備えると共に、
一つのレジスタのうちの全部もしくは一部が、それぞれ所定ビット数のデータを格納する０番からｍ番までの（ｍ＋１）個のレジスタ部分に分割され、
前記ｍ個の加算器のうちのｉ（ｉ≦ｍである自然数）番目の加算器における２個の入力端の一方がｉ番目の前記レジスタ部分に、他方が（ｉ−１）番目の前記レジスタ部分に、それぞれ接続され、当該ｉ番目の加算器の出力端が、前記ｉ番目のレジスタ部分に接続され、
前記ｉ番名の加算器は、前記２個の入力端を介して、前記ｉ番目のレジスタ部分に格納されているデータおよび前記（ｉ−１）番目のレジスタ部分に格納されているデータの入力を受付け、該受付けたデータを用いて加算演算を行い、該加算結果を前記出力端を介して前記ｉ番目のレジスタに格納する演算処理を行い、
一つの命令により、前記ｍ個の加算器は、各々、前記演算処理を同じタイミングで実行し、
前記ｍ個の加算器は、前記演算処理を所定の回数繰り返し実行すること
を特徴とする関数発生器。
【請求項２】
命令実行型演算処理装置内に設けられる関数発生器であって、
０番からｍ番までの（ｍ＋１）個（ｍは自然数）の加算器と、少なくとも一つのレジスタとを備えると共に、
一つのレジスタのうちの全部もしくは一部が、それぞれ所定ビット数のデータを格納する０番からｍ番までの（ｍ＋１）個のレジスタ部分に分割され、
前記ｍ＋１個の加算器のうちの０番目の加算器の２個の入力端に０番目のレジスタ部分に格納されたデータと所定の定数を示すデータとが入力され、該０番目の加算器の出力端が、前記０番目のレジスタ部分に接続され、
前記ｍ＋１個の加算器のうちのｉ（１≦ｉ≦ｍを満足する自然数）番目の加算器における２個の入力端の一方がｉ番目の前記レジスタ部分に、他方が（ｉ−１）番目の前記レジスタ部分に、それぞれ接続され、当該ｉ番目の加算器の出力端が、前記ｉ番目のレジスタ部分に接続され、
前記ｍ＋１個の加算器のうちの０番目の加算器は、前記２個の入力端を介して、前記０番目のレジスタ部分に格納されたデータおよび前記所定の定数を示すデータの入力を受付け、該受付けたデータを用いて加算演算を行い、該加算結果を前記出力端を介して前記０番目のレジスタ部分に格納する演算処理を行い、
前記ｍ＋１個の加算器のうちのｉ番目の加算器は、前記２個の入力端を介して、前記ｉ番目のレジスタ部分に格納されているデータおよび前記（ｉ−１）番目のレジスタ部分に格納されているデータの入力を受付け、該受付けたデータを用いて加算演算を行い、該加算結果を前記出力端を介して前記ｉ番目のレジスタに格納する演算処理を行い、
一つの命令により、前記ｍ＋１個の加算器は、各々、前記演算処理を同じタイミングで実行し、
前記ｍ＋１個の加算器は、前記演算処理を所定の回数繰り返し実行すること
を特徴とする関数発生器。
【請求項３】
命令実行型演算処理装置内に設けられる関数発生器において、
０番からｍ番までの（ｍ＋１）個（ｍは自然数）の加算器と、少なくとも一つのレジスタとを備えると共に、
一つのレジスタのうちの全部もしくは一部が、それぞれ所定ビット数のデータを格納する０番からｍ番までの（ｍ＋１）個のレジスタ部分に分割され、
前記ｍ＋１個の加算器のうちの０番目の加算器の２個の入力端の一方に０番目のレジスタ部分に格納されたデータが入力され、他方に前記レジスタ以外の他のレジスタに格納されたデータが入力され、該０番目の加算器の出力端が、前記０番目のレジスタ部分に接続され、
前記ｍ＋１個の加算器のうちのｉ（１≦ｉ≦ｍを満足する自然数）番目の加算器における２個の入力端の一方がｉ番目の前記レジスタ部分に、他方が（ｉ−１）番目の前記レジスタ部分に、それぞれ接続され、当該ｉ番目の加算器の出力端が前記ｉ番目のレジスタ部分に接続され、
前記ｍ＋１個の加算器のうちの前記０番目の加算器は、前記２個の入力端を介して、前記０番目のレジスタ部分に格納されたデータ、および、前記他のレジスタに格納されたデータの入力を受付け、該受付けたデータを用いて加算演算を行い、該加算結果を前記出力端を介して前記０番目のレジスタ部分に格納する演算処理を行い、
前記ｍ＋１個の加算器のうちの前記ｉ番目の加算器は、前記２つの入力端を介して、前記ｉ番目のレジスタ部分に格納されているデータ、および、前記（ｉ−１）番目のレジスタ部分に格納されているデータの入力を受付け、該取得したデータを用いて加算演算を行い、該加算結果を前記出力端を介して前記ｉ番目のレジスタに格納する演算処理を行い、
一つの命令により、前記ｍ＋１個の加算器は、各々、前記演算処理を同じタイミングで実行し、
前記ｍ＋１個の加算器は、前記演算処理を所定の回数繰り返し実行すること
を特徴とする関数発生器。
【請求項４】
命令実行型演算処理装置内に設けられる関数発生器において、
０番からｍ番までの（ｍ＋１）個（ｍは自然数）の加算器と、少なくとも一つのレジスタと、スイッチ回路とを備えると共に、
一つのレジスタのうちの全部もしくは一部が、それぞれ所定ビット数のデータを格納する０番からｍ番までの（ｍ＋１）個のレジスタ部分に分割され、
前記ｍ＋１個の加算器のうちの０番目の加算器の２個の入力端の一方に、０番目のレジスタ部分に格納されたデータが入力され、他方に前記スイッチ回路により選択された前記レジスタ以外の他のレジスタに格納されたデータおよび所定の定数を示すデータの一方が選択的に入力され、該０番目の加算器の出力端が前記０番目のレジスタ部分に接続され、
前記ｍ＋１個の加算器のうちの前記ｉ（１≦ｉ≦ｍを満足する自然数）番目の加算器における２個の入力端の一方がｉ番目の前記レジスタ部分に、他方が（ｉ−１）番目の前記レジスタ部分にそれぞれ接続され、当該ｉ番目の加算器の出力端が前記ｉ番目のレジスタ部分に接続され、
前記ｍ＋１個の加算器のうちの前記０番目の加算器は、前記２つの入力端を介して、前記０番目のレジスタ部分に格納されたデータ、および、前記スイッチ回路により選択された前記他のレジスタに格納されたデータおよび前記定数を示すデータのいずれかの入力を受付け、該受付けたデータを用いて加算演算を行い、該加算結果を前記出力端を介して前記０番目のレジスタ部分に格納する演算処理を行い、
前記ｍ＋１個の加算器のうちのｉ番目の加算器は、前記２つの入力端を介して、前記ｉ番目のレジスタ部分に格納されているデータおよび前記（ｉ−１）番目のレジスタ部分に格納されているデータの入力を受付け、該受付けたデータを用いて加算演算を行い、該加算結果を前記出力端を介して前記ｉ番目のレジスタに格納する演算処理を行い、
一つの命令により、前記ｍ＋１個の加算器は、各々、前記演算処理を同じタイミングで実行し、
前記ｍ＋１個の加算器は、前記演算処理を所定の回数繰り返し実行すること
を特徴とする関数発生器。
【請求項５】
請求項１〜４のいずれか一項に記載の関数発生器を備える命令実行型演算処理装置。
【請求項６】
請求項５の命令実行型演算処理装置を備え、前記関数発生器によりスプライン関数を求めて、曲面分割を行うようにする画像生成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、例えば、３次元コンピュータグラフィックスに適用される画像生成装置における曲面分割を行うためのスプライト関数の演算を行うのに好適な関数発生器に関する。
【０００２】
【従来の技術】
３次元コンピュータグラフィックスでは、多数のポリゴン（例えば三角形や四角形などの多角形）の集合として物体を表示している。このため、３次元コンピュータグラフィックスに適用される画像生成装置において、曲面を含む画像の当該曲面部分を、より自然に表現しようとする場合には、細かい多くのポリゴンを生成して画像を描画画像を生成するようにする必要がある。
【０００３】
しかし、この多数のポリゴンの頂点座標のデータを格納するためには、大容量のメモリが必要であり、ゲーム機などのようにメモリ容量に制限がある場合には、ポリゴンの大きさが大きくなり、きめの細かい曲面を表現することが困難である。
【０００４】
そこで、従来から曲面などの形状をスプライン関数等を合成して表現し、ポリゴンの頂点座標の代わりに曲面を決定するコントロールポイントのデータのみをメモリに格納して、メモリを節約する手法が用いられている。
【０００５】
この方法は、例えば３次元等の多次元関数であるスプライン関数を高速に生成しなければならなず、多数個の積和演算器が必要になる。このため、ハードウエア構成が複雑になり、ＬＳＩ化したときに、チップ面積が大きくなり、また、高価格になってしまう。
【０００６】
【発明が解決しようとする課題】
ところで、後述するように、微分解析器を組み合わせることにより、スプライン関数を逐次計算することができる。しかし、スプライン関数を専用に計算するための微分解析器を命令実行型演算処理装置（以下、マイクロプロセッサという）の演算処理部分に内蔵するには、専用の回路をマイクロプロセッサ内に設ける必要があり、チップ面積の増大を伴い、製造コストの上昇を招くという問題がある。このため、従来は、このような計算機能を専用化したマイクロプロセッサは存在せず、その結果、スプライン関数は、通常の加算命令等を組み合わせてソフトウエアで作成する必要があり、計算速度が遅いという問題があった。
【０００７】
この発明は、以上のような欠点の生じない関数発生器を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記課題を解決するために、この発明による関数発生器は、マイクロプロセッサ内部の算術演算回路における加算器に変更を加えて、機能を拡張したものであり、
ｍ個（ｍは自然数）の加算器と、少なくとも一つのレジスタとを備えると共に、
前記マイクロプロセッサ内の一つのレジスタのうちの全部もしくは一部が、それぞれ所定ビット数のワードをストアする０番からｍ番までの（ｍ＋１）個のレジスタ部分に分割され、
前記ｍ個の加算器のうちのｉ（ｉ≦ｍ）番目の加算器における２個の入力端の一方がｉ番目の前記レジスタ部分に、他方が（ｉ−１）番目の前記レジスタ部分に、それぞれ接続され、当該ｉ番目の加算器の出力端が、前記ｉ番目のレジスタ部分に接続されて構成されることを特徴とする。
【０００９】
そして、一つの命令により、前記ｍ個の加算器の加算が同時に実行させられることにより、高速に関数演算が実行される。
【００１０】
【発明の実施の形態】
以下、この発明による関数発生器の一実施の形態を、ゲーム機内に設けられ、曲面描画のときの曲面分割処理に用いられる命令実行型演算処理部に適用した場合について、図を参照しながら説明する。
【００１１】
図３は、この発明の一実施の形態の画像生成装置の構成例を示すもので、この例は３Ｄグラフィックス機能と、動画再生機能とを備えるゲーム機の場合の例である。
【００１２】
図４は、この例のゲーム機の外観を示すもので、この例のゲーム機は、ゲーム機本体１と、ユーザの操作入力部を構成するコントロールパッド２とからなる。コントロールパッド２は、このコントロールパッド２に接続されているケーブル３の先端に取り付けられているコネクタプラグ４を、ゲーム機本体１のコネクタジャック５Ａに結合させることにより、ゲーム機本体１に接続される。この例では、いわゆる対戦ゲーム等のために、２個のコントロールパッド２がゲーム機本体１に対して接続することができるように、２個のコネクタジャック５Ａ，５Ｂがゲーム機本体１に設けられている。
【００１３】
この例のゲーム機は、ゲームプログラムや画像データが書き込まれたＣＤ−ＲＯＭディスク６をゲーム機本体１に装填することにより、ゲームを楽しむことができる。
【００１４】
次に、図３を参照しながら、この例の画像生成装置の構成について説明する。この例の画像生成装置としてのゲーム機は、メインバス１０と、サブバス２０とからなる２つのシステムバスを備える構成を有している。これらメインバス１と、サブバス２との間のデータのやり取りは、バスコントローラ３０により制御される。
【００１５】
そして、メインバス１０には、メインＣＰＵ１１と、メインメモリ１２と、画像伸長部１３と、前処理部１４と、描画処理部１５と、メインのＤＭＡコントローラ１６（以下、メインＤＭＡＣという）が接続されている。描画処理部１５には、処理用メモリ１７が接続されていると共に、この描画処理部１５は表示データ用のいわゆるフレームメモリと、Ｄ／Ａ変換回路を含み、この描画処理部１５からのアナログビデオ信号がビデオ出力端子１８に出力される。図示しないが、このビデオ出力端子１８は、表示装置としての例えばＣＲＴディスプレイに接続される。
【００１６】
サブバス２０には、サブＣＰＵ２１と、サブメモリ２２と、ブートＲＯＭ２３と、サブのＤＭＡコントローラ２４と、音声処理用プロセッサ２５と、入力部２６と、ＣＤ−ＲＯＭデコーダ２７と、拡張用の通信インターフェース部２８とが接続される。ブートＲＯＭ２３には、ゲーム機としての立ち上げを行うためのプログラムが格納されている。また、音声処理用プロセッサ２５に対しては、音声処理用メモリ２５Ｍが接続されている。そして、この音声処理用プロセッサ２５はＤ／Ａ変換回路を備え、これよりはアナログ音声信号を音声出力端子２９に出力する。
【００１７】
そして、ＣＤ−ＲＯＭデコーダ２７は、ＣＤ−ＲＯＭドライバ４０に接続されており、ＣＤ−ＲＯＭドライバ４０に装填されたＣＤ−ＲＯＭディスク６に記録されているアプリケーションプログラム（例えばゲームのプログラム）やデータをデコードする。ＣＤ−ＲＯＭディスク６には、例えば離散コサイン変換（ＤＣＴ）により画像圧縮された動画や静止画の画像データや、ポリゴンを修飾するためのテクスチャー画像の画像データも記録されている。
【００１８】
ＣＤ−ＲＯＭディスク６のアプリケーションプログラムには、ポリゴン描画命令が含まれており、曲面の場合には、使用するスプライン関数を特定するデータと、曲面を決定するコントロールポイントのデータが、このＣＤ−ＲＯＭ３１に記憶されている。後述するように、コントロールポイントのデータの代わりに、微分解析器からなるスプライン関数発生器に与える初期化データに適するデータを記憶しておくようにしてもよい。
【００１９】
入力部２６は、前述した操作入力手段としてのコントロールパッド２と、ビデオ信号の入力端子と、音声信号の入力端子を備えるものである。
【００２０】
メインＣＰＵ１１は、メインバス１０側の各部の管理および制御を行なう。また、このメインＣＰＵ１１は、物体を多数のポリゴンの集まりとして描画する場合の処理の一部を行う。メインＣＰＵ１１は、後述もするように、１画面分の描画画像を生成するための描画命令例をメインメモリ１２上に作成する。
【００２１】
また、このメインＣＰＵ１１は、キャッシュメモリ１１Ｍを有し、ＣＰＵインストラクションの一部は、メインバス１０からフェッチすることなく実行できる。さらに、メインＣＰＵ１１には、描画命令を作成する際にポリゴンについての座標変換演算を行なうための座標演算部１１Ｇが、ＣＰＵ内部コプロセッサとして設けられている。座標演算部１１Ｇは、３次元座標変換及び３次元から表示画面上の２次元への変換の演算を行なう。
【００２２】
このように、メインＣＰＵ１１は、内部に命令キャッシュ１１Ｍと座標演算部１１Ｇを有しているため、その処理をメインバス１０を使用しなくても、ある程度行うことができるため、メインバス１０を開放しやすい。
【００２３】
メインメモリ１２は、動画や静止画の画像データに対しては、圧縮された画像データのメモリ領域と、伸長デコード処理された伸長画像データのメモリ領域とを備えている。また、メインメモリ１２は、描画命令列などのグラフィックスデータのメモリ領域（これをパケットバッファという）を備える。このパケットバッファは、メインＣＰＵ１１による描画命令列の設定と、描画命令列の描画処理部への転送とに使用される。
【００２４】
画像伸長部１３は、ＣＤ−ＲＯＭディスク６から再生された圧縮画像データの伸長処理を行なうもので、ハフマン符号のデコーダと、逆量子化回路と、逆離散コサイン変換回路のハードウエアを備える。ハフマン符号のデコーダの部分は、メインＣＰＵ１１がソフトウエアとしてその処理を行うようにしてもよい。
【００２５】
描画処理部１５は、メインメモリ１２から転送されてくる描画命令を実行して、その結果をフレームメモリに書き込む。フレームメモリから読み出された画像データは、Ｄ／Ａ変換器を介してビデオ出力端子１８に出力され、画像モニター装置の画面に表示される。
【００２６】
前処理部１４は、ＣＰＵを備えるプロセッサの構成とされるもので、メインＣＰＵ１１の処理の一部を分担することができるようにするものである。この例の場合には、後述するように、この前処理部１４において、曲面についての画像生成処理を行うようにする。その場合には、曲面分割処理と、分割処理により得られた多数個のポリゴンデータを、表示のための２次元座標データに変換する処理も、この前処理部１４が行う。
【００２７】
このゲーム機の基本的な処理について以下に説明する。
【００２８】
［ＣＤ−ＲＯＭディスク６からのデータの取り込み］
図３の例のゲーム機に電源が投入され、ゲーム機本体１にＣＤ−ＲＯＭディスク６が装填されると、ブートＲＯＭ２３の、ゲームを実行するためのいわゆる初期化処理をするためのプログラムが、サブＣＰＵ２１により実行される。すると、ＣＤ−ＲＯＭディスク６の記録データが次のようにして取り込まれる。
【００２９】
すなわち、ＣＤ−ＲＯＭディスク６から、圧縮画像データ、描画命令及びメインＣＰＵ１１が実行するプログラムが、ＣＤ−ＲＯＭドライバ４０、ＣＤ−ＲＯＭデコーダ２７を介して読み出され、サブＤＭＡＣ２４によってサブメモリ２２に一旦ロードされる。
【００３０】
そして、このサブメモリ２２に取り込まれたデータは、サブＤＭＡＣおよびバスコントローラ３０、さらにはメインＤＭＡＣ１６によってメインメモリ１２に転送される。なお、サブＣＰＵ２１は、描画処理部１５のフレームに対して直接的にアクセスできるように構成されており、このサブＣＰＵ２１によっても表示画像内容の変更が、描画処理部１５の制御とは離れて可能とされている。
【００３１】
［圧縮画像データの伸長及び転送］
メインメモリ１２の入力データのうち、圧縮画像データは、この例では、メインＣＰＵ１１がハフマン符号のデコード処理を行った後、再びメインＣＰＵ１１によりメインメモリ１２に書き込まれる。そして、メインＤＭＡＣ１６は、このハフマン符号のデコード処理後の画像データをメインメモリ１２から画像伸長部１３に転送する。画像伸長部１３は、逆量子化の処理と、逆ＤＣＴの処理を行って画像データの伸長デコード処理を行う。伸長された画像データは、メインＤＭＡＣ１６が、メインメモリ１２に転送する。
【００３２】
メインＣＰＵ１１は、伸長された画像データのマクロブロックと呼ばれる単位データが一定量、メインメモリ１２に蓄積された時点で、当該伸長データを描画処理部１５のフレームメモリに転送する。この際に、伸長画像データがフレームメモリの画像メモリ領域に転送されれば、そのまま背景動画像として画像モニター装置で表示されることになる。また、フレームメモリのテクスチャー領域に転送される場合もある。このテクスチャー領域の画像データは、テクスチャー画像として、ポリゴンの修飾に使用される。
【００３３】
［描画命令列についての処理と転送］
物体の面を構成するポリゴンは、３次元的な奥行きの情報であるＺデータに従って奥行き方向の深い位置にあるポリゴンから順に描画することにより、２次元画像表示面に立体的に画像を表示することができる。メインＣＰＵ１１は、このように奥行き方向の深い位置にあるポリゴンから順に、描画処理部１５で描画が行われるようにするための描画命令列をメインメモリ１２上に作成する。
【００３４】
メインＣＰＵ１１は、入力部２６のコントロールパッドからのユーザーの操作入力に基づいて、物体や視点の動きを計算し、メインメモリ１２上にポリゴン描画命令列を作成する。
【００３５】
この描画命令列が完成すると、メインＤＭＡＣ１６は、前処理部１４を通じて、描画命令毎に、メインメモリ１２から描画処理部１５に転送する。この際に、前処理部１４において、曲面のデータについては後述のような曲面分割演算およびポリゴン生成処理が施される。
【００３６】
描画処理部１５では、送られてきたデータを順次実行して、その結果を、フレームメモリの描画領域に格納する。このポリゴン描画の際、データは、描画処理部１５の勾配計算ユニットに送られ、勾配計算が行なわれる。勾配計算は、ポリゴン描画で多角形の内側をマッピングデータで埋めていく際、マッピングデータの平面の傾きを求める計算である。テクスチャーの場合はテクスチャー画像データでポリゴンが埋められ、また、グーローシェーディングの場合は輝度値でポリゴンが埋められる。
【００３７】
更に、動画のテクスチャーが可能である。つまり、動画テクスチャーの場合には、前述したように、ＣＤ−ＲＯＭディスクからの圧縮された動画データは、一旦、メインメモリ１２に読み込まれる。そして、この圧縮画像データは、画像伸長部１３に送られる。画像伸長部１３で、画像データが伸長される。このとき、前述したように、伸長処理の一部は、メインＣＰＵ１１が負担する。
【００３８】
そして、伸長された動画データは描画処理部１５のフレームメモリ上のテクスチャー領域に送られる。テクスチャー領域は、この描画処理部１５のフレームメモリ内に設けられているので、テクスチャーパターン自身も、フレーム毎に書き換えることが可能である。このように、テクスチャー領域に動画を送ると、テクスチャーが１フレーム毎に動的に書き換えられて変化する。このテクスチャー領域の動画により、ポリゴンへのテクスチャーマッピングを行えば、動画のテクスチャーが実現される。
【００３９】
［曲面描画処理の説明］
図５は、曲面描画処理についての、前処理部１４と、描画処理部１５の要部の構成を示す図である。
【００４０】
この図５に示すように、前処理部１４は、ポリゴン分割手段１４１と、スプライン関数発生器１４２と、座標変換手段１４３とを備える。ポリゴン分割手段１４１と、座標変換手段１４３とは曲線描画処理の場合の前処理部出の機能をブロックとして示したものである。スプライン関数発生器１４２は、この発明による関数発生器の一実施例であり、後述するように、複数の加算器からなる微分解析器で構成される。
【００４１】
そして、描画処理部１５は、機能手段としての描画手段１５１と、フレームメモリ１５２とからなる。
【００４２】
曲面描画処理の場合には、前処理部１４には、この例の場合には、曲面のコントローラポイントのデータがメインメモリ１２から転送される。ポリゴン分割手段１４１は、このコントローラポイントのデータを加工して、スプライン関数発生器１４２に供給する初期化データを生成する。また、ポリゴン分割手段１４１は、予め、描画しようとする曲面を分割したときの分割ステップの大きさを定めておく。そして、生成した初期化データと、分割ステップの大きさの情報とを、スプライン関数発生器１４２に与え、このスプライン関数発生器１４２を初期化する。
【００４３】
スプライン関数発生器１４２は、初期化データを起算点として関数演算処理を行う。そして、各分割ステップごとのスプライン関数値を生成する。生成されたスプライン関数値は、ポリゴン分割手段１４１により、読み出される。
【００４４】
ポリゴン分割手段１４１は、スプライン関数発生器１４２から読み出したスプライン関数値を元に、描画しようとする曲面を前記の分割ステップで分割したときに生じる分割平面の、例えば４角形ポリゴンのポリゴンデータを生成する。この各分割平面のポリゴンデータは、座標変換手段１４３に送られる。座標変換手段１４３は、このポリゴンデータを、表示装置としてのＣＲＴディスプレイに適合するスクリーン座標系の２次元頂点データに変換し、描画手段１５１に送る。
【００４５】
描画手段１５１は、受け取った２次元頂点データに基づいて平面の塗り潰し、必要に応じてテクスチャーや光源計算から得られた輝度値を元にしたシェーディングを施すような処理をした画像データをフレームメモリ１５２に書き込む。フレームメモリ１５２のデータは、適宜、読み出されて、Ｄ／Ａ変換され、ビデオ出力端子１８より画像モニター装置としてのＣＲＴディスプレイに供給されて曲面を含む画像が表示される。
【００４６】
次に、以上の曲面描画処理について、さらに説明する。
【００４７】
図６は、描画しようとする一つの曲面の例を示すものである。この図６において、ｕ，ｖは、曲面に関するパラメータ座標であり、図６のように、曲面に沿ってそれぞれ矢印の方向に増加するものとする。Ｑ（ｕ，ｖ）は、この曲面上の点であり、３次元ベクトルである。今、３次のスプライン関数を用いた曲面を考え、この曲面のコントロールポイントを３次元ベクトルＰｉｊとすると、ｕ，ｖ曲面上の点Ｑ（ｕ，ｖ）は、図７の式（ｅｑ１）で表される。
【００４８】
この式（ｅｑ１）で、Ｂｉ（ｕ），Ｂｊ（ｖ）は３次のスプライン関数であり、Ｂｉ（ｕ）は図７の式（ｅｑ２）のように表され、Ｂｊ（ｖ）は図７の式（ｅｑ３）のように表される。
【００４９】
そして、図７の式（ｅｑ１）を変形すると、図７の式（ｅｑ４）のようになる。ただし、この式（ｅｑ４）のＳｋ（ｖ）は、図７の式（ｅｑ５）のように表されるスプライン関数であり、３次元ベクトルである。また、式（ｅｑ５）におけるｖの各次数の項の係数Ｒｋｌは、図７の式（ｅｑ６）であり、これも３次元ベクトルである。
【００５０】
以上のことから、式（ｅｑ６）で表される３次元ベクトルＲｋｌが求まると、式（ｅｑ５）で表される３次元ベクトルＳｋ（ｖ）が求まり、これにより点Ｑ（ｕ，ｖ）が求められることになる。式（ｅｑ６）において、ａｋｊおよびａｌｊは、スプライン関数が決まれば決まる値であり、ＣＤ−ＲＯＭディスク６には、曲面のデータとしてのコントロールポイントのデータのほかに、曲面を決定するスプライン関数を特定するための情報として記憶されている。
【００５１】
したがって、今、曲面をｕ方向にＧ個、ｖ方向にＨ個に、等分割すれば、各々の分割により得られる分割平面の頂点は、以下に説明するアルゴリズムにより求めることができる。このアルゴリズムを図８および図９のフローチャートを参照しながら説明する。
【００５２】
まず、ステップＳ１において、式（ｅｑ６）より、ｋ，ｌ∈｛０，１，２，３｝に対して、コントロールポイントの３次元ベクトルＰｉｊから、前記３次元ベクトルＲｋｌを求める。なお、このようにして、演算により３次元ベクトルＲｋｌを求めるのではなく、予め曲面データとして、コントロールポイントのデータの代わりに、この３次元ベクトルＲｋｌをＣＤ−ＲＯＭディスク６に記憶しておき、このＣＤ−ＲＯＭディスク６から直接的に読み出すようにしてもよい。
【００５３】
ステップＳ１が終了すると、ステップＳ２に進み、この例では、曲面をｕ方向にＧ個、ｖ方向にＨ個に、等分割するときの、ｕ方向およびｖ方向の分割ステップ幅ΔｕおよびΔｖを、Δｕ＝１／Ｇ、Δｖ＝１／Ｈとして設定する。
【００５４】
次に、ステップＳ３に進み、ｋ∈｛０，１，２，３｝に対する各々の３次のスプライン関数Ｓｋ（ｖ）の関数発生器に、ｖ方向の分割ステップ幅Δｖと、前記３次元ベクトルＲｋｌを渡して、前記スプライン関数発生器を初期化する。すなわち、このときには、スプライン関数発生器１１２は、スプライン関数Ｓｋ（ｖ）の関数発生器として働くものである。
【００５５】
そして、次のステップＳ４において、ｖの値を０、ｖ方向の繰り返しのステップ回数ｒｖを０として初期設定をした後、ｖ方向の以下の処理をｒｖ＝Ｈ回だけ、繰り返す。すなわち、ステップＳ５においては、ｒｖ＝Ｈ回のｖ方向の処理が終了したか否か判断し、未だ、終了していなければ、ステップＳ６に進む。
【００５６】
このステップＳ６では、関数発生器１１２において、現在の３次元ベクトルＳｋ（ｖ）を求め、この求めたＳｋ（ｖ）と、ｕ方向の分割ステップ幅Δｕとを、スプライン関数Ｑ（ｕ，ｖ）の関数発生器の初期化データとして渡して、このスプライン関数発生器を初期化する。すなわち、このときには、スプライン関数発生器１１２は、スプライン関数Ｑ（ｕ，ｖ）の関数発生器として働くことになる。
【００５７】
そして、次のステップＳ７において、ｕの値を０、ｕ方向の繰り返しのステップ回数ｒｕを０として初期設定をした後、ｕ方向の以下の処理をｒｕ＝Ｇ回だけ、繰り返す。すなわち、ステップ８５においては、ｒｕ＝Ｇ回のｕ方向の処理が終了したか否か判断し、未だ、終了していなければ、ステップＳ９に進む。
【００５８】
ステップＳ９では、現在のスプライン関数Ｑ（ｕ，ｖ）の値を求めて、その値をポリゴン分割手段１４１に出力する。そして、ステップＳ１０に進み、ｕの値を分割ステップ幅Δｕだけ大きくすると共に、ｕ方向の繰り返しステップ回数ｒｕを１だけ、インクリメントする。そして、ステップＳ８〜ステップＳ１０の処理を繰り返し、ｕ方向の次の分割ステップのところでの、スプライン関数Ｑ（ｕ，ｖ）の値を求めて、その値をポリゴン分割手段１４１に出力する。
【００５９】
ステップＳ８〜ステップＳ１０の処理を、ｒｕ＝Ｇ回だけ繰り返して、ｖ方向の１つの分割ステップのところでの、ｕ方向のすべての分割ステップについての、スプライン関数Ｑ（ｕ，ｖ）の値が求まると、ステップＳ８からステップＳ１１に進み、ｖの値を分割ステップΔｖだけ大きくすると共に、ｖ方向の繰り返しステップ回数ｒｖを１だけ、インクリメントする。そして、ステップＳ５以降の処理を繰り返す。これにより、ｖ方向の各分割ステップ点ごとの、ｕ方向のすべての分割ステップ点についての、スプライン関数Ｑ（ｕ，ｖ）の値が求まり、その値がポリゴン分割手段１４１に送られる。
【００６０】
以上のようにして繰り返し処理が行われて、ステップＳ５において、ｖ方向の繰り返しステップ回数ｒｖ＝Ｈとなったことが判別されると、このステップＳ５からステップＳ１２に進み、ポリゴン分割手段１４１は、蓄えていた各分割ステップ点ごとのスプライン関数Ｑ（ｕ，ｖ）の値を元にして、Ｇ×Ｈ個の４角形ポリゴンを作成し、これを座標変換手段１４３に送る。
【００６１】
座標変換手段１４３は、前述したように、４角形ポリゴンのデータをＣＲＴディスプレイに表示するための２次元頂点データに変換して、描画処理部１５に送る。描画処理部１５は、これに基づいて、前述したような描画処理を実行し、ＣＲＴディスプレイの画面には、曲面の画像が表示される。
【００６２】
なお、上記のアルゴリズムにおいては３次元ベクトルを扱ったが、同時座標系の４次元ベクトル系にも同様な手法で拡張可能である。また、上述のアルゴリズムでは、分割ステップ幅Δｕ、Δｖごとのスプライン関数Ｑ（ｕ，ｖ）の値を、すべて得た後に、Ｇ×Ｈ個の４角形ポリゴンを作成し、これを座標変換手段１４３に送るようにしたが、ステップＳ９において、スプライン関数Ｑ（ｕ，ｖ）が得られた時点で、ポリゴン分割手段１４１が対応する４角形ポリゴンを作成して、座標変換手段１４３に出力するようにしてもよい。
【００６３】
また、上述したように、曲面のスプライン関数を特定する情報と、曲面のコントロールポイントのデータとを、ＣＤ−ＲＯＭディスク６に記憶しておくのではなく、コントロールポイントのデータに代えて、スプライン関数発生器の初期化データに適した情報、例えば上記の例で言えば、３次元ベクトルＲｋｌを、ＣＤ−ＲＯＭディスク６に保存しておくようにすれば、上述した計算アルゴリズムの計算時間の短縮化が図れるものである。
【００６４】
［関数発生器の一実施例］
この例の関数発生器の構成を説明する前に、前処理部１４を構成するマイクロプロセッサの内部の要部のハードウエア構成について説明する。図１０は、この例のマイクロプロセッサのＡＬＵ（論理演算装置）の部分の要部構成例を示すもので、加算部５１、減算部５２、掛算部５３、割算部５４の四則演算部に加えて微分解析部５５を備える。
【００６５】
これら加算部５１、減算部５２、掛算部５３、割算部５４、微分解析部５５には、図示しないレジスタからの入力データＩＮ１，ＩＮ２がそれぞれ供給される。また、これら加算部５１、減算部５２、掛算部５３、割算部５４、微分解析部５５の出力は、スイッチ回路５６にそれぞれ供給される。スイッチ回路５６は、切換制御命令ＣＮＴにより切り換えられ、図示しないレジスタに出力が送られるものである。
【００６６】
微分解析器５５は、複数個の加算器により構成されるもので、上述したアルゴリズムの場合のように、３次元ベクトル値（３次元関数値）を計算するものである場合には、３個の加算器を用いて構成できる。
【００６７】
図１は、このように３次元ベクトル値を計算する場合の微分解析器５５の構成の一例を、レジスタとの関連も併せて示した図である。この例の場合の微分解析器５５は、スプライン関数発生器１４２を構成するものである。
【００６８】
すなわち、この例の微分解析器５５は、３個の加算器Ａ１，Ａ２，Ａ３を備える。そして、この例の場合、マイクロプロセッサには、複数個のレジスタが設けられるが、各レジスタのビット数は、例えば６４ビット分とされている。つまり、このマイクロプロセッサは、６４ビットを１ワードとして扱うことができるものである。
【００６９】
微分解析器５５では、図１にも示すように、一つのレジスタＲＧの、この例では、全容量を、加算器の数ｍとしたとき、（ｍ＋１）個のレジスタ部分に分割して、その各レジスタ部分のデータを１ワードとして扱うようにする。すなわち、図１の例では、ｍ＝３であるので、６４ビットの容量のレジスタＲＧを、１６ビットを１ワードとする４個のレジスタ部分ＲＡ０，ＲＡ１，ＲＡ２，ＲＡ３に分割したものと見做して使用する。
【００７０】
そして、説明を一般化するために、レジスタ部分ＲＡ０，ＲＡ１，ＲＡ２，ＲＡ３と、３個の加算器Ａ１，Ａ２，Ａ３を、図１のように、図の右側から、そのサフィックスの数値の小さいものから順に並べたと仮定した場合、ｉ（ｉ≦３）番目の加算器Ａｉの２個の入力端は、ｉ番目および（ｉ−１）番目のレジスタ部分ＲＡｉおよびＲＡ（ｉ−１）に、それぞれ接続される。また、当該ｉ番目の加算器Ａｉの出力端は、前記ｉ番目のレジスタ部分ＲＡｉに接続される。
【００７１】
そして、一つの命令により、この微分解析器５５の３個の加算器Ａ１〜Ａ３は、加算演算を同時に実行する。すなわち、３個の加算器Ａｉ（ｉ＝１，２，３）は、レジスタＲＡ（ｉ−１）とレジスタＲＡｉからデータを読み出し、加算した結果をレジスタＲＡｉに書き込むという動作を、同時に行うものである。
【００７２】
ここで、前述した分割ステップ幅Δｕごとの、ｕに関する３次のスプライン関数の値は、次のようにして、この図１の構成の微分解析器５５からなるスプライン関数発生器１４２から得られる。
【００７３】
この場合、スプライン関数演算に当たって、まず、レジスタ部分ＲＡ０，ＲＡ１，ＲＡ２，ＲＡ３のそれぞれには、図１１Ａに示すような初期値が書き込まれる。この図１１Ａから分かるように、この初期値には、分割ステップ幅Δｕが含まれる。なお、このΔｕの大きさは、前述したように、等分割の場合には、その分割数によって定まるものであり、分割数がユーザの入力や、ＣＤ−ＲＯＭディスク６に記憶されている情報に基づいて設定されることにより、定まるものであり、一定ではない。もっとも、曲面分割が等分割でない場合であっても勿論良い。
【００７４】
このようにレジスタ部分ＲＡ０〜ＲＡ３に初期値が設定された後、加算器Ａ１，Ａ２，Ａ３による加算を同時に実行すると、レジスタ部分ＲＡ０〜ＲＡ３の内容は、その実行回数により、図１１Ｂに示すように変わる。この図１１Ｂから分かるように、加算器Ａ１，Ａ２，Ａ３による加算を、この例では、３回、同時に実行すると、レジスタ部分ＲＡ３には、３次のスプライン関数の値が得られるものである。
【００７５】
このように、所定回数ｒだけ、加算器Ａ１，Ａ２，Ａ３による加算を同時に実行すると、レジスタＲＡ３には、
ａ・（ｒ・Δｕ）3 ＋ｂ・（ｒ・Δｕ）2 ＋ｃ・（ｒ・Δｕ）＋ｄ
が格納されるものである。すなわち、分割ステップ幅Δｕごとの、ｕに関する３次のスプライン関数がレジスタ部分ＲＡ３に得られる。したがって、各分割ステップ幅Δｕごとのｒ回の加算器Ａ１，Ａ２，Ａ３による加算の同時実行後のレジスタ部分ＲＡ３の値を、スプライン関数発生器１４２の出力とすることで、上述したアルゴリズム中の各分割ステップごとのスプライン関数の値がポリゴン分割手段１４１に与えられるものである。
【００７６】
なお、３次以上のｎ次のスプライン関数を発生する関数発生器は、ｎ個の加算器を用いた微分解析器により関数発生器を構成して、上述と同様の手法で求めることができる。
【００７７】
従来のマルチメディア命令においては、図２に示すように、４個の加算器Ａ０〜Ａ３のｊ番目（ｊ＝０，１，２，３）の加算器Ａｊの２つの入力の一方には、レジスタＲＧ１の各分割レジスタ部分ＲＡｊの値を、他方にはレジスタＲＧ２の各分割レジスタ部分ＲＢｊの値を、それぞれ供給する構成として、それぞれのレジスタ部分の内容を書き換えながら、それぞれの加算器Ａｊにそれぞれ加算命令を加えるようにしなければならない。
【００７８】
これに対して、図１に示した、この実施の形態による微分解析器の構成によれば、レジスタは一つでよく、また、加算器Ａｉを同時に実行させる命令を設けることにより、高速にスプライン関数の値を、レジスタ部分ＲＡ３に得ることができる。
【００７９】
図１２は、この発明による関数発生器の他の実施の形態を示すものである。
【００８０】
この実施の形態は、４個の加算器Ａ０，Ａ１，Ａ２，Ａ３を備える場合である。この例の場合も、レジスタ部分ＲＡ０，ＲＡ１，ＲＡ２，ＲＡ３と、４個の加算器Ａ０，Ａ１，Ａ２，Ａ３を、図１のように図の右側から、そのサフィックスの数値の小さいものから順に並べたと仮定した場合、加算器Ａ１〜Ａ３については、図１の例とまったく同様に接続構成される。そして、この例の場合には、加算器Ａ０の一方の入力端には、定数、例えば「０」が供給され、他方の入力端には、レジスタ部分ＲＡ０の値が供給される。
【００８１】
この図１２の例は、機能的には、図１の実施の形態の場合と同じ機能を有するが、この構成は、図２に示した構成と近い構成になり、より現実的な構成例となる。
【００８２】
図１３は、この発明による関数発生器のさらに他の実施の形態を示すものである。この例は、図１１の構成と同様に、４個の加算器Ａ０〜Ａ３を用いる場合の例であるが、加算器Ａ０の一方の入力端には、定数に代えて、他のレジスタの分割レジスタ部分からのデータを取り入れるようにしたものである。
【００８３】
すなわち、この図１３の実施の形態の場合には、２個のレジスタＲＧｋとレジスタＲＧ（ｋ＋１）（ｋは整数）を想定すると共に、これらのレジスタＲＧｋとレジスタＲＧ（ｋ＋１）を、前述の実施の形態と同様に１６ビット単位で分割して、それぞれ４個のレジスタ部分ＲＡ０〜ＲＡ３、ＲＢ０〜ＲＢ３を備えるものとする。そして、レジスタＲＧｋのレジスタ部分ＲＢ３からの１６ビットワードを、加算器Ａ０の他方の入力とする。
【００８４】
なお、この場合、レジスタＲＧｋ，ＲＧ（ｋ＋１）は、加算器Ａ０〜Ａ３に対して固定的なものではなく、命令により切り換えられる任意のものである。
【００８５】
この図１３の実施の形態によれば、スプライン関数の次数が微分解析器を構成する加算器の個数よりも多い場合にも、以下に説明するような手法により、その高次のスプライン関数の値を、効率よく求めることができる。
【００８６】
例えば７次のスプライン関数を計算する場合について、この図１３の実施の形態の動作について説明する。
【００８７】
（１）まず、予め適切な初期値をレジスタＲＧ（ｋ＋１）の各レジスタ部分ＲＡ３，ＲＡ２，ＲＡ１，ＲＡ０に設定し、また、レジスタＲＧｋのレジスタ部分ＲＢ３に「０」を設定しておく。
【００８８】
（２）次に、一つの命令により、それぞれの加算器Ａ１，Ａ２，Ａ３は、以下のような計算を同時に行い、その計算結果を、矢印で示すように、対応するレジスタに格納する。この場合、計算上は、３つのレジスタを使用することになるので、それらのレジスタをＲ０，Ｒ１，Ｒ２とする。そして、それぞれのレジスタ部分に格納される１６ビットワードを、Ｒ０（Ｗ０）〜Ｒ０（Ｗ３）、Ｒ１（Ｗ１）〜Ｒ１（Ｗ３）、Ｒ２（Ｗ２）〜Ｒ２（Ｗ３）とする。つまり、Ｒｋ（Ｗｉ）は、レジスタＲＧｋにおけるレジスタ部分ＲＡｉのワードを示している。
【００８９】
Ｒ２（Ｗ３）←Ｒ２（Ｗ３）＋Ｒ２（Ｗ２）
Ｒ２（Ｗ２）←Ｒ２（Ｗ２）＋Ｒ２（Ｗ１）
Ｒ２（Ｗ１）←Ｒ２（Ｗ１）＋Ｒ２（Ｗ０）
Ｒ２（Ｗ０）←Ｒ２（Ｗ０）＋Ｒ１（Ｗ３）。
【００９０】
（３）次に、一つの命令により、それぞれの加算器Ａ１，Ａ２，Ａ３は、以下のような計算を同時に行い、その計算結果を、矢印で示すように、対応するレジスタに格納する。
Ｒ１（Ｗ３）←Ｒ１（Ｗ３）＋Ｒ１（Ｗ２）
Ｒ１（Ｗ２）←Ｒ１（Ｗ２）＋Ｒ１（Ｗ１）
Ｒ１（Ｗ１）←Ｒ１（Ｗ１）＋Ｒ１（Ｗ０）
Ｒ１（Ｗ０）←Ｒ１（Ｗ０）＋Ｒ０（Ｗ３）。
【００９１】
（４）前記（３）で求めたワードＲ１（Ｗ３）を得る。
【００９２】
（５）そして、前記（２）に戻り、以上をｒ回繰り返す。
【００９３】
以上のアルゴリズムにより、前記（４）では、ｒ回目の繰り返し計算の結果のワードＲ１（Ｗ３）として、
0003657350.tif 000002
で表される７次のスプライン関数の値を得ることができる。
【００９４】
図１４は、この発明による関数発生器の、さらに他の実施の形態である。この例では、図１３の実施の形態において、加算器Ａ０の一方の入力端側にスイッチ回路ＳＷを設け、このスイッチ回路ＳＷを、命令により切り換えるようにすることによって、この加算器Ａ０の一方の入力として、定数「０」と、他のレジスタＲＧｋのレジスタ部分ＲＢ３のデータとのいずれかを、選択的に選べるように構成している。
【００９５】
この図１４の実施の形態によれば、前記の計算のアルゴリズムの（１）において、レジスタＲＧｋのレジスタ部分ＲＢ３に「０」を設定する代わりに、スイッチ回路ＳＷを切換制御して、定数「０」を選択して入力する状態にすることができ、レジスタを、その分だけ、節約することができる。
【００９６】
図１２および図１４の実施の形態においては、加算器Ａ０の一方の入力としての定数は、「０」としたが、この定数としては、「０」以外の値や一般的なレジスタ値であってもよい。例えば、定数を「０」以外にすることにより、より多様なスプライン関数が生成可能となる。
【００９７】
以上のようにして、マイクロプロセッサの算術演算装置に、若干の変更を加えて、命令を拡張することにより、スプライン関数等の関数発生機能を、マイクロプロセッサに持たせることが簡単にできる。
【００９８】
そして、図１３および図１４の実施の形態のような構成とすることにより、限られた数の加算器を用いた微分解析器を用いて、高次のスプライン関数を効率よく発生する関数発生器を実現することができる。
【００９９】
さらに、基本演算を１命令として実行し、また、中間データを汎用レジスタに置くことができるようにしているので、管理がしやすく、ソフトウエア作成上、使いやすいというメリットもある。
【０１００】
なお、以上の例では、１つのレジスタのすべての容量部分を分割し、その分割レジスタ部分を用いるようにしたが、レジスタの容量のが大きい場合には、その一部の容量部分を分割して、その分割レジスタ部分を用いるようにしてもよい。
【０１０１】
また、以上の説明では、この発明による関数発生器を、コンピュータグラフィックス機能を備えるゲーム機における、曲面分割のために使用する場合について説明したが、使用用途はこれに限られるものではなく、多次の多項式を計算する関数発生器のすべてに適用可能である。
【０１０２】
【発明の効果】
以上説明したように、この発明によれば、マイクロプロセッサの算術演算装置に若干の変更を加えて、命令を拡張するという簡単な構成により、ｎ次のスプライン関数等の値を得ることができる関数発生器を実現することができる。
【図面の簡単な説明】
【図１】この発明による関数発生器の一実施の形態を示すブロック図である。
【図２】一般的なマルチメディア命令の例を示す図である。
【図３】この発明の適用例としてのゲーム機の構成例を示すブロック図である。
【図４】図３の例のゲーム機の外観例を示す図である。
【図５】この発明による関数発生器の一例を用いて曲面分割処理を行うための構成を示すブロック図である。
【図６】曲面の分割例を説明するための図である。
【図７】３次のスプライン関数を説明するための図である。
【図８】この発明による画像生成方法の一実施の形態の要部の動作手順を説明するフローチャートの一部である。
【図９】この発明による画像生成方法の一実施の形態の要部の動作手順を説明するフローチャートの一部である。
【図１０】この発明による関数発生器の一例を含むマイクロプロセッサの要部の構成例を示す図である。
【図１１】図５の関数発生器１４２に与える初期値データおよび関数発生動作を説明するために用いる図である。
【図１２】この発明の関数発生器の他の実施の形態を説明するための図である。
【図１３】この発明の関数発生器の他の実施の形態を説明するための図である。
【図１４】この発明の関数発生器の他の実施の形態を説明するための図である。
【符号の説明】
１４１…ポリゴン分割手段、１４２…スプライン関数発生器、１４３…座標変換手段、１５…描画処理部、１５１…描画手段、１５２…フレームメモリ、Ａ１〜Ａ３…加算器、ＲＧ，ＲＧｋ，ＲＧ（ｋ＋１）…レジスタ、ＲＡ０〜ＲＡ３，ＲＢ０〜ＲＢ３…分割されたレジスタ部分、ＳＷ…スイッチ回路
【図１】
0003657350.tif 000003
【図２】
0003657350.tif 000004
【図３】
0003657350.tif 000005
【図４】
0003657350.tif 000006
【図５】
0003657350.tif 000007
【図６】
0003657350.tif 000008
【図７】
0003657350.tif 000009
【図８】
0003657350.tif 000010
【図９】
0003657350.tif 000011
【図１０】
0003657350.tif 000012
【図１１】
0003657350.tif 000013
【図１２】
0003657350.tif 000014
【図１３】
0003657350.tif 000015
【図１４】
0003657350.tif 000016