(57)【要約】【課題】  モニタ画面に表示された画像を写真のような高い画質で印刷する。【解決手段】  ポリゴンによって物体の三次元形状を表したポリゴンデータから、二次元画像を生成してモニタ画面に表示する。画面の印刷命令を受け取ると、二次元画像の画像データか、二次元画像の生成に用いたポリゴンデータの少なくとも一方を取得することにより、二次元画像と物体の配置が同一で、且つポリゴンデータよりも小さなポリゴンによる画像データを生成する。次いで、この画像データを所定のポリゴン数ずつ読み出して印刷データを生成し、プリンタに出力する。こうすれば、物体の形状が細かなポリゴンによって表現された画像を印刷することができるので、モニタ画面に表示された画像を、写真のような高い画質で印刷することが可能となる。また大判印刷を行う場合でも、メモリ容量の制約を受けることがない。【選択図】        図２０
2006228088.tif 000002
【特許請求の範囲】
【請求項１】
物体の表面を複数のポリゴンに分割して、該各々のポリゴンを構成する頂点の座標によって該物体の三次元形状を表現したポリゴンデータから、該物体の二次元画像を印刷するための印刷データを生成して出力する印刷データ出力装置であって、
前記ポリゴンデータから生成された前記画像データに基づいて、前記物体の二次元画像を画面上に表示する画像表示手段と、
前記画面上に表示された二次元画像の印刷命令を受け取ると、前記画像データまたは該画像データの生成に用いられた前記ポリゴンデータの少なくとも一方を取得することにより、該二次元画像と前記物体の配置が同一で、且つ、該ポリゴンデータよりも小さなポリゴンを用いて表現された精密ポリゴンデータを生成する精密ポリゴンデータ生成手段と、
前記生成した精密ポリゴンデータを所定のポリゴン数ずつ読み出して前記画像データに変換した後、該得られた画像データを順次、前記印刷データとして出力する印刷データ出力手段と
を備える印刷データ出力装置。
【請求項２】
請求項１記載の印刷データ出力装置であって、
前記物体を前記画面に表示するためのポリゴンデータたる表示用ポリゴンデータと、該表示用ポリゴンデータを構成する前記ポリゴンよりも小さなポリゴンによって構成された印刷用ポリゴンデータと、を記憶しているポリゴンデータ記憶手段を備え、
前記画像表示手段は、前記表示用ポリゴンデータから生成された前記画像データに基づいて、前記二次元画像を表示する手段であり、
前記精密ポリゴンデータ生成手段は、前記表示用ポリゴンデータまたは該表示用ポリゴンデータから生成された画像データの少なくとも一方を取得して、該表示用ポリゴンデータを前記印刷用ポリゴンデータで置き換えることによって、前記精密ポリゴンデータを生成する手段である印刷データ出力装置。
【請求項３】
請求項１記載の印刷データ出力装置であって、
前記精密ポリゴンデータ生成手段は、前記印刷命令を受け取ると、前記画像データの生成に用いられた前記ポリゴンデータを取得して、該ポリゴンデータを構成するポリゴンを複数のポリゴンに分割することにより、前記精密ポリゴンデータを生成する手段である印刷データ出力装置。
【請求項４】
請求項１記載の印刷データ出力装置であって、
前記精密ポリゴンデータ生成手段は、前記印刷命令を受け取ると、前記二次元画像の画像データを取得して該二次元画像に含まれるポリゴンを分割することにより、前記精密ポリゴンデータを生成する手段である印刷データ出力装置。
【請求項５】
請求項１ないし請求項４の何れかに記載の印刷データ出力装置であって、
前記印刷データ出力手段は、新たに読み出したポリゴンについての前記画像データと、既に出力した画像データの中で、該新たに読み出したポリゴンについての画像データに少なくとも隣接する部分の画像データとを、前記印刷データとして出力する手段である印刷データ出力装置。
【請求項６】
物体の表面を複数のポリゴンに分割して、該各々のポリゴンを構成する頂点の座標によって該物体の三次元形状を表現したポリゴンデータから、該物体の二次元画像を印刷するための印刷データを生成して出力する印刷データ出力方法であって、
前記ポリゴンデータから生成された前記画像データに基づいて、前記物体の二次元画像を画面上に表示する第１の工程と、
前記画面上に表示された二次元画像の印刷命令を受け取ると、前記画像データまたは該画像データの生成に用いられた前記ポリゴンデータの少なくとも一方を取得することにより、該二次元画像と前記物体の配置が同一で、且つ、該ポリゴンデータよりも小さなポリゴンを用いて表現された精密ポリゴンデータを生成する第２の工程と、
前記生成した精密ポリゴンデータを所定のポリゴン数ずつ読み出して前記画像データに変換した後、該得られた画像データを順次、前記印刷データとして出力する第３の工程と
を備える印刷データ出力方法。
【請求項７】
物体の表面を複数のポリゴンに分割して、該各々のポリゴンを構成する頂点の座標によって該物体の三次元形状を表現したポリゴンデータから、該物体の二次元画像を印刷するための印刷データを生成して出力する方法を、コンピュータを用いて実現するためのプログラムであって、
前記ポリゴンデータから生成された前記画像データに基づいて、前記物体の二次元画像を画面上に表示する第１の機能と、
前記画面上に表示された二次元画像の印刷命令を受け取ると、前記画像データまたは該画像データの生成に用いられた前記ポリゴンデータの少なくとも一方を取得することにより、該二次元画像と前記物体の配置が同一で、且つ、該ポリゴンデータよりも小さなポリゴンを用いて表現された精密ポリゴンデータを生成する第２の機能と、
前記生成した精密ポリゴンデータを所定のポリゴン数ずつ読み出して前記画像データに変換した後、該得られた画像データを順次、前記印刷データとして出力する第３の機能と
を実現するためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータグラフィックス技術を用いて作成した３次元データから、２次元画像を生成して印刷する技術に関する。
【背景技術】
【０００２】
近年では、いわゆるコンピュータグラフィックス（ＣＧ）技術の進歩により、想像によって作り上げた架空の世界を、あたかも実在するかのように表現することが可能となっている。また、こうした技術を利用して、実在するかのように表現された仮想的な世界の中を、これも実在するかのように表現されたキャラクタを動かしてゲームを進めるゲーム機も開発されており、現在では広く使用されている。
【０００３】
ＣＧ上で３次元の物体を扱う場合、物体の表面を小さな平面多角形に分割して、これら多角形の集まりによって表現する方法を用いることが一般的である。このように、物体の形状を規定するために用いられる平面多角形は「ポリゴン」と呼ばれている。ポリゴンは平面であるから、ポリゴンを用いて表現した物体は表面がゴツゴツした感じとなり、違和感を与えるおそれがあるが、こうした問題はポリゴンの大きさを小さくすることによって、事実上問題とならない程度まで改善することができる。もちろん、ポリゴンの大きさを小さくすれば、物体を構成するポリゴン数が増加するので、画像を迅速に表示することは困難となる。そこでポリゴンの大きさは、物体を実在する物のように表現することに対する要求と、画像の表示速度との兼ね合いから決定されている。
【０００４】
ＣＧ技術を活用したゲーム機では、画像の表示速度に対する要求は更に大きなものとなる。すなわちゲーム機では、ゲームを行う者の操作に反応してキャラクタを速やかに動かさなければならず、このためには画像の表示を迅速に行う必要がある。その一方で、ゲーム中はキャラクタが動いていることが多く、表面のゴツゴツした感じは目立ち難いという特性がある。そこでゲーム機では、物体を真実らしく表現することよりも、画像の表示速度に比重を置いてポリゴンの大きさが設定されている。また、ポリゴンによって表現された物体を、より本物らしく表現しながら、画像を迅速に表示可能とするために、種々の技術が開発され、提案されている（例えば、特許文献１、特許文献２など）。
【０００５】
【特許文献１】特開平７−２６２３８７号公報
【特許文献２】特開平８−１６１５１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、たとえ画面上では実在する物のように表現されていたとしても、例えば紙媒体などの様に、より鮮明に画像を表示可能な媒体に印刷すると、物体表面がゴツゴツしていることが分かってしまうという問題があった。印刷した画像で、物体表面がゴツゴツしていることが分かってしまうと、もはや画面上に表示された画像でさえも、仮想的に表現されたものであることが気になってしまうと言う問題があった。
【０００７】
この発明は従来技術における上述した課題を解決するためになされたものであり、画面上に表示されている物体を、紙媒体などのより鮮明に表示可能な媒体に印刷した場合でも、実在する物であるかのように表現可能とする技術の提供を目的とする。
【課題を解決するための手段】
【０００８】
上述した課題の少なくとも一部を解決するために、本発明の印刷データ出力装置は、次の構成を採用した。すなわち、
物体の表面を複数のポリゴンに分割して、該各々のポリゴンを構成する頂点の座標によって該物体の三次元形状を表現したポリゴンデータから、該物体の二次元画像を印刷するための印刷データを生成して出力する印刷データ出力装置であって、
前記ポリゴンデータから生成された前記画像データに基づいて、前記物体の二次元画像を画面上に表示する画像表示手段と、
前記画面上に表示された二次元画像の印刷命令を受け取ると、前記画像データまたは該画像データの生成に用いられた前記ポリゴンデータの少なくとも一方を取得することにより、該二次元画像と前記物体の配置が同一で、且つ、該ポリゴンデータよりも小さなポリゴンを用いて表現された精密ポリゴンデータを生成する精密ポリゴンデータ生成手段と、
前記生成した精密ポリゴンデータを所定のポリゴン数ずつ読み出して前記画像データに変換した後、該得られた画像データを順次、前記印刷データとして出力する印刷データ出力手段と
を備えることを要旨とする。
【０００９】
また、上記の印刷データ出力装置に対応する本発明の印刷データ出力方法は、
物体の表面を複数のポリゴンに分割して、該各々のポリゴンを構成する頂点の座標によって該物体の三次元形状を表現したポリゴンデータから、該物体の二次元画像を印刷するための印刷データを生成して出力する印刷データ出力方法であって、
前記ポリゴンデータから生成された前記画像データに基づいて、前記物体の二次元画像を画面上に表示する第１の工程と、
前記画面上に表示された二次元画像の印刷命令を受け取ると、前記画像データまたは該画像データの生成に用いられた前記ポリゴンデータの少なくとも一方を取得することにより、該二次元画像と前記物体の配置が同一で、且つ、該ポリゴンデータよりも小さなポリゴンを用いて表現された精密ポリゴンデータを生成する第２の工程と、
前記生成した精密ポリゴンデータを所定のポリゴン数ずつ読み出して前記画像データに変換した後、該得られた画像データを順次、前記印刷データとして出力する第３の工程と
を備えることを要旨とする。
【００１０】
かかる本発明の印刷データ出力装置および印刷データ出力方法においては、ポリゴンデータから画像データを生成して二次元画像を画面上に表示する。画面に表示されている二次元画像の印刷命令を受け取ると、該二次元画像の生成に用いられた画像データ、もしくは、該画像データを生成するために使用したポリゴンデータの少なくとも一方を取得して、該二次元画像と前記物体の配置が同一で、且つ、該ポリゴンデータよりも小さなポリゴンを用いて表現された精密ポリゴンデータを生成する。画面に表示された二次元画像の画像データ、もしくは、その画像データを生成するために用いられたポリゴンデータの少なくとも一方を取得しておけば、表示されている二次元画像と物体の配置が一致する精密ポリゴンデータを生成することができる。例えば、取得したポリゴンデータと同じ位置に、精密ポリゴンデータを生成してもよいし、あるいは、小さなポリゴンのポリゴンデータによる二次元画像が、画像データを取得した二次元画像と重なるように、小さなポリゴンによって表現される物体を移動あるいは回転させることとして、得られたポリゴンデータを精密ポリゴンデータとしても良い。このようにして、精密ポリゴンデータが得られたら、今度は、所定のポリゴン数ずつ精密ポリゴンデータを読み出して、二次元画像を表す画像データに変換した後、変換した画像データを、順次、印刷データとして出力する。
【００１１】
このようにして得られた印刷データは、小さなポリゴンから生成された画像データとなっているので、たとえ、紙媒体などの様に鮮明に画像を表示可能な媒体上に印刷した場合でも、物体表面がゴツゴツした画像となることがなく、あたかも実在する物体を撮影した写真のような、高画質な画像を得ることができる。また、こうして印刷された画像は、画面上に表示された二次元画像と、物体の配置が同一となっているので、画面上の二次元画像をそのまま印刷したかのような印象を与えることができる。このため、印刷して得られた高画質な画像が、そのまま画面に表示されているかのような印象を与えることになり、画面の表示を実際の表示以上に実物らしく見せるという効果も得ることができる。更に、印刷データは、所定のポリゴン数ずつ、順次変換されて出力される。このため、精密ポリゴンデータのポリゴン数が如何に多くなった場合でも、画像データを展開するメモリ量などの制約を受けることなく、高画質な画像を印刷することが可能となる。
【００１２】
かかる印刷データ出力装置においては、物体を画面に表示するためのポリゴンデータたる表示用ポリゴンデータと、該表示用ポリゴンデータを構成するポリゴンよりも小さなポリゴンによって構成された印刷用ポリゴンデータとを記憶しておき、画面上に表示された二次元画像を印刷する場合には、次のように、印刷用ポリゴンデータを使用して精密ポリゴンデータを生成することとしても良い。すなわち、画面上に表示された二次元画像の印刷命令を受け取ると、表示用ポリゴンデータまたは該表示用ポリゴンデータから生成された画像データの少なくとも一方を取得する。そして、取得したデータを用いて、印刷用ポリゴンデータを位置合わせしてから、表示用ポリゴンデータに置き換えることによって、精密ポリゴンデータを生成することとしてもよい。
【００１３】
このようにして精密ポリゴンデータを生成することとすれば、印刷用ポリゴンデータとして、物体の形状を正確に表現したポリゴンデータを記憶しておくことで、あたかも実在する物体を撮影して得られた写真のような、高画質な画像を印刷することができる。
【００１４】
尚、表示用ポリゴンデータを印刷用ポリゴンデータに置き換えるに際しては、次のようにして、印刷用ポリゴンデータの位置合わせを行ってから置き換えることとしても良い。すなわち、少なくとも表示用ポリゴンデータおよび印刷用ポリゴンデータの何れのデータも記憶されている物体については、該物体に対して所定の位置に設定された少なくとも３つの座標点を、該表示用ポリゴンデータおよび該印刷用ポリゴンデータの各々の基準点として記憶しておく。ここで、基準点としては、表示用ポリゴンデータのポリゴンを構成する複数の頂点と、印刷用ポリゴンデータのポリゴンを構成する複数の頂点の中から、何れにも含まれる頂点を選択することもできるし、あるいは、これら頂点とは別の座標値に基準点を設定することも可能である。次いで、印刷用ポリゴンデータを、物体の三次元形状を維持したまま移動あるいは回転させることにより、表示用ポリゴンデータの基準点と印刷用ポリゴンデータの基準点とを、少なくとも画面上で一致させる。このとき、表示用ポリゴンデータ側の基準点の三次元座標と、印刷用ポリゴンデータ側の基準点の三次元座標とが一致していることを確認しても良いし、あるいは、これら基準点が画面上で一致していることを確認しても良い。こうして２つのポリゴンデータの基準点を一致させた状態で、表示用ポリゴンデータを印刷用ポリゴンデータで置き換えることによって、精密ポリゴンデータを生成することとしてもよい。
【００１５】
このようにして基準点を一致させてから表示用ポリゴンデータを印刷用ポリゴンデータで置き換えてやれば、印刷用ポリゴンデータによる画像を、表示用ポリゴンデータによる画像に正確に位置合わせすることができるので、物体の配置が画面の表示と同じとなり、あたかも画面の表示をそのまま印刷したかのような画像を印刷することが可能となる。
【００１６】
また、上述した印刷データ出力装置においては、予め記憶しておいた印刷用ポリゴンデータから精密ポリゴンデータを生成する代わりに、画像の表示に用いたポリゴンデータから精密ポリゴンデータを生成することとしてもよい。すなわち、画面に表示された二次元画像の印刷命令を受け取ると、該二次元画像の画像データを生成するために用いられたポリゴンデータを取得して、該ポリゴンデータを構成するポリゴンを複数のポリゴンに分割することによって、精密ポリゴンデータを生成することとしても良い。
【００１７】
こうすれば、印刷用ポリゴンデータを予め記憶しておく必要がないので、記憶容量を節約することが可能となる。また、画面の表示のためのポリゴンデータから、該ポリゴンデータを構成するポリゴンを分割することによって精密ポリゴンデータを生成しているため、精密ポリゴンデータは画面の表示のためのポリゴンデータと同じ位置に生成されることになる。このため、印刷用ポリゴンデータの位置合わせを行う必要がなく、画面の表示を印刷する処理を簡素なものとすることが可能となる。
【００１８】
あるいは、画面に表示された二次元画像の印刷命令を受け取ると、該二次元画像の画像データを取得して、該二次元画像に含まれるポリゴンを複数のポリゴンに分割することによって、精密ポリゴンデータを生成することとしてもよい。
【００１９】
このようにしても、印刷用ポリゴンデータを予め記憶しておく必要が無いので、記憶容量を節約することが可能となる。また、画面に表示された二次元画像の画像データを取得して、該二次元画像に含まれるポリゴンを分割することによって精密ポリゴンデータを生成しているので、精密ポリゴンデータの位置合わせを行う必要がなく、画面の表示を印刷する処理を簡素なものとすることができる。
【００２０】
また、上述した各種の印刷データ出力装置においては、次のようにして、印刷データを出力することとしても良い。すなわち、先ず、所定ポリゴン数ずつ精密ポリゴンデータを読み出して、画像データに変換する。そして、変換した画像データを順次、印刷データとして出力する。このとき、新たに読み出したポリゴンについての画像データを出力するだけでなく、既に出力した画像データの中で、該新たに読み出したポリゴンについての画像データに少なくとも隣接する部分については、既に出力した画像データも、再び印刷データとして出力することとしても良い。
【００２１】
こうすれば、たとえ、多くのポリゴンを含んだポリゴンデータを、所定ポリゴン数ずつ分割して、複数回に分けて画像データを出力する場合でも、毎回出力する画像データは先に出力した画像データに対して、隣接する部分の画像データが重複して含まれていることになる。従って、このような画像データを印刷データとして受け取って、順次、画像を印刷することとすれば、重複部分については２回に分けて印刷することで、毎回の印刷部分の繋ぎ目が目立ってしまうことを回避することが可能となる。
【００２２】
更に本発明は、上述した印刷データ出力方法を実現するためのプログラムをコンピュータに読み込ませ、コンピュータを用いて実現することも可能である。従って、本発明は次のようなプログラム、あるいは該プログラムを記録した記録媒体として把握することもできる。すなわち、上述した印刷データ出力方法に対応する本発明のプログラムは、
物体の表面を複数のポリゴンに分割して、該各々のポリゴンを構成する頂点の座標によって該物体の三次元形状を表現したポリゴンデータから、該物体の二次元画像を印刷するための印刷データを生成して出力する方法を、コンピュータを用いて実現するためのプログラムであって、
前記ポリゴンデータから生成された前記画像データに基づいて、前記物体の二次元画像を画面上に表示する第１の機能と、
前記画面上に表示された二次元画像の印刷命令を受け取ると、前記画像データまたは該画像データの生成に用いられた前記ポリゴンデータの少なくとも一方を取得することにより、該二次元画像と前記物体の配置が同一で、且つ、該ポリゴンデータよりも小さなポリゴンを用いて表現された精密ポリゴンデータを生成する第２の機能と、
前記生成した精密ポリゴンデータを所定のポリゴン数ずつ読み出して前記画像データに変換した後、該得られた画像データを順次、前記印刷データとして出力する第３の機能と
を実現することを要旨とする。
【００２３】
また、上記のプログラムに対応する本発明の記録媒体は、
物体の表面を複数のポリゴンに分割して、該各々のポリゴンを構成する頂点の座標によって該物体の三次元形状を表現したポリゴンデータから、該物体の二次元画像を印刷するための印刷データを生成して出力するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
前記ポリゴンデータから生成された前記画像データに基づいて、前記物体の二次元画像を画面上に表示する第１の機能と、
前記画面上に表示された二次元画像の印刷命令を受け取ると、前記画像データまたは該画像データの生成に用いられた前記ポリゴンデータの少なくとも一方を取得することにより、該二次元画像と前記物体の配置が同一で、且つ、該ポリゴンデータよりも小さなポリゴンを用いて表現された精密ポリゴンデータを生成する第２の機能と、
前記生成した精密ポリゴンデータを所定のポリゴン数ずつ読み出して前記画像データに変換した後、該得られた画像データを順次、前記印刷データとして出力する第３の機能と
を実現するプログラムを記憶していることを要旨とする。
【００２４】
かかるプログラム、あるいは記録媒体に記録されているプログラムをコンピュータに読み込ませ、該コンピュータを用いて上述の各種機能を実現すれば、画面に表示された二次元画像を、あたかも実在する物体を撮影した写真のような高画質の画像として出力することが可能となる。
【発明を実施するための最良の形態】
【００２５】
以下では、本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って説明する。
Ａ．装置構成  ：
Ａ−１．ゲーム機の構成  ：
Ａ−２．カラープリンタの構成  ：
Ｂ．ゲーム画面の表示の概要  ：
Ｃ．第１実施例  ：
Ｃ−１．画像印刷処理  ：
Ｃ−２．印刷データ出力処理  ：
Ｃ−３．印刷処理  ：
Ｃ−４．第１の変形例  ：
Ｃ−５．第２の変形例  ：
Ｄ．第２実施例  ：
【００２６】
Ａ．装置構成  ：
Ａ−１．ゲーム機の構成  ：
図１は、本実施例の画像データ生成装置を備えたゲーム機１００の構成を示す説明図である。本実施例のゲーム機１００は、ＣＰＵ１０１を中心として、メインメモリ１１０、座標変換器（以下、ＧＴＥ：Ｇeometry Ｔransfer Ｅngine）１１２、フレームバッファ１１４、画像処理器（以下、ＧＰＵ：Ｇraphic Ｐroccesing Ｕnit）１１６、ＲＯＭ１０８、ドライバ１０６、通信制御部１０３などが、バスを介して相互にデータをやり取り可能に接続されて構成されている。また、ゲーム機１００には、ゲーム機１００の操作を行うためのコントローラ１０２などが接続されている。更に、本実施例のゲーム機１００にはカラープリンタ２００も接続されており、ゲーム中の画面をカラープリンタ２００に出力することも可能となっている。
【００２７】
ＣＰＵ１０１は、いわゆる算術演算や論理演算を実行する中央演算装置であり、ゲーム機１００全体の制御を司っている。ＲＯＭ１０８は、読み出し専用のメモリであり、ゲーム機１００の電源投入後にＣＰＵ１０１が初めに実行するプログラム（ブートプログラム）を始めとして、各種のプログラムが格納されている。メインメモリ１１０は、データの読み出しおよび書き込みが可能なメモリであり、ＣＰＵ１０１が算術演算や論理演算を実行する際に一時的な記憶領域として使用される。ＧＴＥ１１２は、ＣＰＵ１０１の制御の下で、メインメモリ１１０にアクセスしながら、幾何学的形状を三次元空間で移動、回転させるための演算を高速に実行する。ＧＰＵ１１６は、ＣＰＵ１０１からの命令を受けて、モニタ１５０上に表示される画面を生成する処理を高速に実行する。フレームバッファ１１４は、ＧＰＵ１１６が、モニタ１５０上に表示される画面を生成するために使用する専用メモリである。ＧＰＵ１１６は、フレームバッファ１１４上に生成した画面のデータを読み出してモニタ１５０に出力することにより、ゲーム中の画面を表示する。また、ゲーム中の画面を印刷する場合には、フレームバッファ１１４上に生成されたデータがＧＰＵ１１６を介してカラープリンタ２００に供給されることによって、ゲーム中の画像が印刷される。
【００２８】
ゲームを実行するためのプログラムや各種のデータは、いわゆるコンパクトディスクやデジタルビデオディスクなどの記憶ディスク１０５に記憶されている。これら記憶ディスク１０５をゲーム機１００にセットすると、記憶ディスク１０５に記憶されているプログラムおよびデータがドライバ１０６によって読み出され、メインメモリ１１０に一旦記憶される。そして、コントローラ１０２の操作内容が通信制御部１０３を介してＣＰＵ１０１に入力されると、ＣＰＵ１０１が、メインメモリ１１０に記憶されているプログラムを読み出して所定の処理を実行することにより、ゲームが実行される。
【００２９】
Ａ−２．カラープリンタの構成  ：
図２は、本実施例のゲーム機１００に接続されているカラープリンタ２００の概略構成を示す説明図である。カラープリンタ２００はシアン，マゼンタ，イエロ，ブラックの４色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら４色のインクに加えて、染料または顔料濃度の低いシアン（淡シアン）インクと、染料または顔料濃度の低いマゼンタ（淡マゼンタ）インクとを含めた合計６色のインクドットを形成可能なインクジェットプリンタを用いることもできる。尚、以下では場合によって、シアンインク，マゼンタインク，イエロインク，ブラックインク，淡シアンインク，淡マゼンタインクのそれぞれを、Ｃインク，Ｍインク，Ｙインク，Ｋインク，ＬＣインク，ＬＭインクと略称することがあるものとする。
【００３０】
カラープリンタ２００は、図示するように、キャリッジ２４０に搭載された印字ヘッド２４１を駆動してインクの吐出およびドット形成を行う機構と、このキャリッジ２４０をキャリッジモータ２３０によってプラテン２３６の軸方向に往復動させる機構と、紙送りモータ２３５によって印刷用紙Ｐを搬送する機構と、ドットの形成やキャリッジ２４０の移動および印刷用紙の搬送を制御する制御回路２６０などから構成されている。
【００３１】
キャリッジ２４０には、Ｋインクを収納するインクカートリッジ２４２と、Ｃインク，Ｍインク，Ｙインクの各種インクを収納するインクカートリッジ２４３とが装着されている。インクカートリッジ２４２，２４３をキャリッジ２４０に装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド２４１の下面に設けられた各色毎のインク吐出用ヘッド２４４ないし２４７に供給される。
【００３２】
図３は、インク吐出用ヘッド２４４ないし２４７におけるインクジェットノズルＮｚの配列を示す説明図である。図示するように、インク吐出用ヘッドの底面には、Ｃ，Ｍ，Ｙ，Ｋの各色のインクを吐出する４組のノズル列が形成されており、１組のノズル列あたり４８個のノズルＮｚが、一定のノズルピッチｋで配列されている。
【００３３】
制御回路２６０は、ＣＰＵや、ＲＯＭ、ＲＡＭ、ＰＩＦ（周辺機器インターフェース）等がバスで相互に接続されて構成されている。制御回路２６０は、キャリッジモータ２３０および紙送りモータ２３５の動作を制御することによってキャリッジ２４０の主走査動作および副走査動作を制御するとともに、外部から供給される印刷データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する制御を行う。こうして、制御回路２６０の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ２００はカラー画像を印刷することができる。
【００３４】
また、インク滴を吐出するためにノズルに供給される駆動信号波形を制御してやれば、吐出されるインク滴の大きさを変更して、大きさの異なるインクドットを形成することもできる。このようにしてインクドットの大きさを制御することができれば、印刷しようとする画像の領域に応じて異なる大きさのインクドットを使い分けてやることで、より高画質の画像を印刷することも可能となる。
【００３５】
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡（バブル）を発生させてインク滴を吐出する方法などを用いることができる。また、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタを使用することも可能である。
【００３６】
以上のようなハードウェア構成を有するカラープリンタ２００は、キャリッジモータ２３０を駆動することによって、各色のインク吐出用ヘッド２４４ないし２４７を印刷用紙Ｐに対して主走査方向に移動させ、また紙送りモータ２３５を駆動することによって、印刷用紙Ｐを副走査方向に移動させる。制御回路２６０は、キャリッジ２４０の主走査および副走査の動きに同期させながら、適切なタイミングでノズルを駆動してインク滴を吐出することによって、カラープリンタ２００は印刷用紙上にカラー画像を印刷することが可能となっている。
【００３７】
Ｂ．ゲーム画面の表示の概要  ：
本実施例のゲーム機１００では、ゲームの舞台として設定された仮想的な三次元空間の中で、メインキャラクタを操作することによってゲームが進行するようになっている。図４は、モニタ１５０上にゲーム中の画面が表示されている様子を例示した説明図である。図示されている画面には、想像上の惑星表面が表示されており、惑星の表面には各種の建造物が設定されている様子が仮想的に表示されている。このようなゲームの舞台の中を、メインキャラクタである飛行艇を操縦しながら進んでいくことによってゲームが行われる。
【００３８】
モニタ１５０の画面では二次元の形状しか表現し得ないが、ゲーム機１００の内部では、惑星表面や、飛行艇、各種の建造物などについては三次元的な形状を伴った物体として表現されている。このように、ゲーム機１００の内部で三次元的な形状を伴うものとして扱われている物体を、本明細書中では「オブジェクト」と呼ぶことにする。図４に例示した画面では、画面のほぼ中央に大きく表示された飛行艇ob1 や、惑星表面ob2 、ドーム状の建造物ob3 、遠方に見えるピラミッド状の２つの建造物ob11、ob12、更には、惑星の表面上を飛行する６つの飛行円盤ob4 ないしob9 などがオブジェクトであり、これらについては、物体の表面形状を三次元的に表すデータが記憶されている。このため、メインキャラクタである飛行艇ob1 を操作することにより、飛行艇ob1 に対して、他のオブジェクト（例えば建造物や飛行円盤等）の位置関係が変化すると、これに伴って、モニタ１５０上でのオブジェクトの見え方も変化することになる。この結果、飛行艇ob1 や、惑星表面ob2 などのオブジェクトは、想像によって作り出されたものであるにも拘わらず、あたかも現実に存在しているかのように、モニタ１５０に表示することが可能となっている。また、詳細には後述するが、本実施例のゲーム機１００では、モニタ１５０に表示された画面を印刷することで、あたかも写真で撮影したかのような画像を印刷することも可能となっている。
【００３９】
尚、図４に示した例では、惑星の空の部分や、空に浮かぶ衛星は、オブジェクトではなく二次元的な画像がそのままモニタ１５０に表示されたものとなっている。従って、これらについては、飛行艇ob1 を操作しても、モニタ１５０上での見え方が変化することはない。これは、ゲームのメインキャラクタである飛行艇ob1 の移動範囲に対して極めて遠方にあるため、飛行艇ob1 の位置が変わっても見え方はほとんど変化せず、従って二次元画像として扱えば十分であることによる。図５は、モニタ１５０の画面上で、二次元画像がそのまま表示されている領域を、ハッチングを付して表した説明図である。このように、本実施例のゲーム機１００では、モニタ１５０に表示される画面の一部に、二次元画像を嵌め込んで表示することも可能となっている。
【００４０】
次に、ゲーム機１００が、物体を三次元的な形状を伴ったオブジェクトとして取り扱う方法について説明する。図６は、メインキャラクタである飛行艇ob1 の形状を示す斜視図である。図の左側には、飛行艇ob1 を斜め後方から見た様子が示されており、図の右側には、飛行艇ob1 を斜め前方から様子が示されている。図示されているように、飛行艇ob1 は、表面のほとんどの部分が滑らかな曲面によって構成されている。ゲーム機１００の内部では、このような三次元的な曲面を有する物体を、平面多角形を用いて表現する。すなわち、三次元的な曲面を細かな平面多角形に分割し、これら平面多角形によって近似的に表現するのである。
【００４１】
図７は、メインキャラクタの飛行艇ob1 の形状を細かな平面多角形によって表現した様子を概念的に示した説明図である。このように、細かな多角形に分割すれば三次元的な曲面を持った物体形状を、平面多角形によって表現することが可能である。尚、このような平面多角形は「ポリゴン」と呼ばれている。本実施例のゲーム機１００では、全てのオブジェクトがポリゴンの集まりとして表現されており、ポリゴンを構成する各頂点の三次元座標値によってオブジェクトの形状が表現されている。本明細書においては、ポリゴンの頂点の座標によってオブジェクトの形状を表現したデータを、「ポリゴンデータ」と呼ぶことにする。また、本実施例のゲーム機１００においては、各オブジェクトのポリゴンデータは、オブジェクトテーブルと呼ばれるテーブルによって管理されている。
【００４２】
図８は、本実施例のゲーム機１００において、各オブジェクトのポリゴンデータを管理するために用いられるオブジェクトテーブルを概念的に示した説明図である。図示されているように、オブジェクトテーブルには、各オブジェクトを識別するためのオブジェクト番号と、オブジェクトの形状を示したポリゴンデータが格納されているメインメモリ１１０の先頭アドレスと、オブジェクトを構成するポリゴン数とが記憶されている。オブジェクトテーブルには、このようなオブジェクト番号とポリゴンデータの先頭アドレスとポリゴン数とを一組とするレコードが、オブジェクトの数だけ設定されている。
【００４３】
図９は、オブジェクトの形状を示したポリゴンデータのデータ構造を示す説明図である。図示されているようにポリゴンデータは、ポリゴンの通し番号と、各ポリゴンを構成する頂点のＸＹＺ座標値と、ポリゴンに付与されるテクスチャの番号と、オブジェクトに設定されている基準点のＸＹＺ座標値などから構成されている。このうち、ポリゴンの番号、頂点座標、テクスチャ番号についてはポリゴン毎に一組ずつ設定されており、一方、基準点のＸＹＺ座標値はオブジェクトについて設定されている。
【００４４】
各ポリゴンに設定されている頂点座標の個数は、ポリゴンの形状に応じた個数が設定されている。例えば、ポリゴンが三角形であれば３つの頂点から構成されているから、そのポリゴンについては３つの頂点座標が設定される。同様に、ポリゴンが四角形であれば４つの頂点座標が設定されることになる。本実施例では、全てのオブジェクトが三角形のポリゴンで構成されており、従って、各ポリゴンには３つずつ頂点座標が設定されている。
【００４５】
また、テクスチャ番号は、簡単に言えば、ポリゴン内を塗りつぶすべき色彩を示す番号のようなものと考えることができる。例えば、オブジェクトの表面が赤ければ、そのオブジェクトを構成する全てのポリゴンを赤色としておけばよい。この場合、ポリゴンのテクスチャ番号には、赤色を示す番号が指定されることになる。もっとも、このように色彩だけでなく、アルミや真鍮などの各種の金属表面や、ガラスのような透明な表面、更には木肌のような表面を、テクスチャ番号として指定することも可能である。テクスチャ番号は、このようにポリゴンに付与される表面の状態を指定する番号である。
【００４６】
一方、オブジェクトについて設定されている基準点は、三次元空間におけるオブジェクトの位置と姿勢とを表すために用いられるＸＹＺ座標値である。本実施例のゲーム機１００では、ゲーム中に表示されるモニタ１５０の画面を、あたかも写真のような鮮明な画像として印刷することが可能となっており、詳細には後述するが、対象とするオブジェクトの位置および向きの情報を用いることによって、このような鮮明な画像を印刷することを可能としている。このため本実施例のオブジェクトには、そのオブジェクトが三次元空間内のどの位置に存在していて、どちらの方向を向いているかを特定するために、基準点が設定されている。図７に示した飛行艇（オブジェクト番号ob1 ）については、機体先頭部に設けられた基準点Ｐ１と、左右の尾翼の後端にそれぞれ設けられた基準点Ｐ２、Ｐ３の、合計３つの基準点が設けられている。このように、最低３つの基準点が設けられていれば、三次元空間内でのオブジェクトの位置および向きを特定することができる。もちろん、基準点の個数は３つに限らず、より多数の基準点を設けておくこととしても良い。図９に示したポリゴンデータには、これら基準点のＸＹＺ座標値が設定されている。尚、基準点は、必ずしも全てのオブジェクトに設けられている必要はない。この点については、後ほど詳しく説明する。
【００４７】
以上に説明したように、本実施例のゲーム機１００では、全てのオブジェクトにオブジェクト番号が付与されており、オブジェクトの表面形状はポリゴンの頂点座標を示すポリゴンデータによって表現されている。そして、オブジェクト番号からオブジェクトテーブルを引くことによって対応するポリゴンデータの先頭アドレスを取得すれば、メインメモリ１１０の該当アドレス以降に書き込まれているデータを読み出すことによって、オブジェクトの三次元的な形状を表した頂点座標を取得することが可能となっている。ゲーム機１００のモニタ１５０に表示するための画像データは、このようにして取得した三次元形状を示すポリゴンデータに、後述する処理を施すことによって生成されている。
【００４８】
尚、図８に例示したオブジェクトテーブルでは、ポリゴンデータの先頭アドレス、およびオブジェクトを構成するポリゴン数の２つの項目だけが、オブジェクト番号に対応付けて設定されているが、これら以外の項目も設定することとしても良い。例えば、オブジェクトを構成するポリゴンのタイプ、すなわちポリゴンが何角形であるかを示すデータや、ポリゴンに基準点が設けられているか否か、更には基準点の個数を示すデータなどを、オブジェクト番号に対応付けて設定しておくことも可能である。
【００４９】
図１０は、本実施例のゲーム機１００が、ゲーム中の画面をモニタ１５０に表示する処理の概要を示したフローチャートである。かかる処理は、ＣＰＵ１０１を中心として、メインメモリ１１０、ＧＴＥ１１２、フレームバッファ１１４、ＧＰＵ１１６などが協動しながら実行される処理である。以下、フローチャートに従って説明する。
【００５０】
ゲーム画面表示処理を開始すると、ＣＰＵ１０１は、コントローラ１０２からの入力があったか否かを判断する（ステップＳ１０）。前述したように、ゲーム中は、ゲーム機１００に対する操作は専らコントローラ１０２によって行われるので、先ず初めにコントローラ１０２からの操作入力があったか否かを判断するのである。そして、入力がなかった場合は（ステップＳ１０：ｎｏ）、フレームバッファ１１４に記憶されている画像データをモニタ１５０に出力して、画面の表示を更新する処理（画面更新処理）を行う（ステップＳ５０）。フレームバッファ１１４には、モニタ１５０に表示すべき画像データが生成されて記憶されている。画像データを生成してフレームバッファ１１４に記憶するための処理、およびフレームバッファ１１４に記憶されている画像データをモニタ１５０に出力する画面更新処理の内容については後述する。一方、コントローラ１０２からの入力があったと判断された場合には（ステップＳ１０：ｙｅｓ）、コントローラ１０２による操作の内容をモニタ１５０の画面に反映させるべく、後述する一連の処理を行う。
【００５１】
コントローラ１０２からの入力が検出されると、コントローラ１０２によって操作されたオブジェクトを、ゲームの舞台として設定されている三次元空間内で、操作に応じた距離および方向に移動させる処理を行う（ステップＳ２０）。一例として、コントローラ１０２による操作が、メインキャラクタである飛行艇ob1 を前進させるものであった場合について説明する。前述したように飛行艇ob1 は、ゲーム機１００の内部では複数のポリゴンによって表現されており（図７参照）、各ポリゴンの頂点座標はポリゴンデータに設定されている（図９参照）。また、ポリゴンデータが記憶されているメモリ領域の先頭アドレスは、オブジェクトテーブルを参照することによって取得することができる。
【００５２】
そこで、メインキャラクタである飛行艇ob1 を前進させる場合は、先ずオブジェクトテーブルを参照して、飛行艇（オブジェクト番号ob1 ）に対応するポリゴンデータの先頭アドレスを取得する。次いで、メインメモリ１１０上の取得したアドレスを先頭とするメモリ領域に記憶されているポリゴンデータを読み出すことによって、各ポリゴンを構成する頂点座標を取得する。こうして得られた頂点座標は、ゲームの舞台として設定された三次元空間内において、現時点での飛行艇ob1 の位置を表す座標となっている。
【００５３】
この点について、若干補足して説明する。記憶ディスク１０５には、各オブジェクトについてのポリゴンデータの初期値が記憶されている。ゲームの開始時には、初期値のポリゴンデータが、記憶ディスク１０５から読み込まれてメインメモリ１１０に記憶されるとともに、ポリゴンデータを記憶した先頭アドレス値が、オブジェクトテーブルに設定される。そして、ゲームの進行に伴って、オブジェクトが移動、回転、あるいは変形すると、後述する処理によって、メインメモリ１１０に記憶されているポリゴンデータの内容が更新されていく。従って、オブジェクトテーブルを参照して先頭アドレスを取得すれば、各オブジェクトの現時点での頂点座標を読み出すことが可能となっているのである。
【００５４】
ここでは、飛行艇ob1 が前進するように、コントローラ１０２が操作されたものとしているから、図１０に示したゲーム画面表示処理のＳ２０では、オブジェクトテーブルを参照することにより、現在の飛行艇ob1 の位置を示すポリゴンデータをメインメモリ１１０から取得する。次いで、コントローラ１０２の操作量から、三次元空間内で飛行艇ob1 を移動させる向きと移動量とを決定し、移動後の飛行艇ob1 の座標値を算出する。かかる演算は、ＣＰＵ１０１の制御の下でＧＴＥ１１２によって高速に実行される。具体的には、ＣＰＵ１０１は飛行艇ob1 の移動方向および移動量を決定すると、ポリゴンデータの先頭アドレスの値と共にＧＴＥ１１２に供給する。ＧＴＥ１１２は、供給された先頭アドレスに基づいて飛行艇ob1 のポリゴンデータを読み出した後、このポリゴンデータの頂点座標に対して座標変換を行うことにより、移動後の頂点座標を算出する。こうして得られた変換後の頂点座標によって、メインメモリ１１０のポリゴンデータを更新する。以上では、メインキャラクタである飛行艇ob1 を前進させた場合について説明したが、コントローラ１０２によって他のオブジェクトが操作された場合は、操作されたオブジェクトについて同様の処理が実行される。この結果、メインメモリ１１０に記憶されている各オブジェクトのポリゴンデータには、常に最新のオブジェクトの座標値が記憶されていることになる。
【００５５】
このようにして、コントローラ１０２の操作をオブジェクト位置に反映させたら、各オブジェクトのポリゴンデータから二次元画像のデータを生成する処理（レンダリング処理）を開始する（ステップＳ３０）。レンダリング処理では、ポリゴンデータによって表現された三次元的なオブジェクトを、モニタ１５０の画面に相当する平面上に投影するような処理を行うことによって、三次元的なオブジェクトから二次元的な画像を生成する。
【００５６】
図１１は、レンダリング処理の概要を示した説明図である。図１１では、サイコロ形状のオブジェクトにレンダリング処理を施すことにより、二次元的な画像を生成する様子が示されている。レンダリング処理に際しては、先ず初めに、オブジェクトを観察するための視点Ｑを設定し、次いで、オブジェクトと視点Ｑとの間に、モニタ１５０の画面に相当する投影面Ｒを設定する。そして、オブジェクトの表面から選択した任意の点と視点Ｑとを直線で結び、この直線が投影面Ｒと交差する交点を決定する。例えば、図１１に示したように、オブジェクト上のａ点を選択したとすると、ａ点と視点Ｑとを結ぶ直線が投影面Ｒと交わる交点としてＲａ点を決めることができる。ここで、周知のように光は直進する性質を有するから、ａ点から出て視点Ｑに向かう光は、投影面Ｒ上のＲａ点に像を結ぶことになる。換言すれば、投影面Ｒ上のＲａ点は、オブジェクト上のａ点が投影される点と考えることができる。従って、オブジェクトの表面の全ての点について、このような操作を行えば、投影面Ｒ上に投影されたオブジェクトの二次元像を得ることができる。
【００５７】
もっとも、前述したようにオブジェクトはポリゴンによって表現されているから、オブジェクト表面の全ての点についてこうした操作を行う必要はなく、ポリゴンの頂点座標についてのみ実行すればよい。例えば、図１１に示すように、オブジェクト表面のｂ点およびｃ点が、投影面Ｒ上のＲｂ点、Ｒｃ点にそれぞれ投影されたものとする。この場合、オブジェクト上のａ点、ｂ点、ｃ点を頂点とする三角形のポリゴンは、投影面Ｒ上では、Ｒａ点、Ｒｂ点、Ｒｃ点を頂点とする三角形の領域に投影されるものと考えて良い。また、オブジェクト上のポリゴンが例えば赤色であったとすると、このポリゴンが投影面Ｒ上に投影された三角形の領域も赤色になると考えて良い。すなわち、オブジェクト上のポリゴンが有するテクスチャ番号は、投影面Ｒ上に投影された領域にも引き継がれると考えることができる。
【００５８】
更に、レンダリング処理では、いわゆる陰面消去と呼ばれる処理も行われる。陰面消去とは、オブジェクト表面の中で、他の表面の陰になっている部分を消去する処理である。例えば、図１１に示した例では、オブジェクト表面のｂ点、ｄ点、ｅ点を頂点とするポリゴンは、視点Ｑから見てオブジェクトの裏側にあり、全体が他の表面の陰になっているため投影面Ｒ上に像を結ぶことはない。そこで、このようなポリゴンについては、投影面Ｒ上に投影像が表示されないようにするのである。尚、オブジェクトの形状および視点Ｑの設定によっては、あるポリゴンの一部の領域だけが他の表面の陰になる場合もある。このような場合は、そのポリゴンの陰になっている部分だけの表示が省略されて、陰になっていない部分についてだけ、投影像が表示されることになる。
【００５９】
このように、レンダリング処理では、オブジェクトを構成するポリゴンの頂点を投影面Ｒに投影したときの座標値を算出する処理が行われる。このような座標値の算出は、比較的簡単に行うことができる。図１２（ａ）は、オブジェクト上の座標点（Ｘ，Ｙ，Ｚ）を投影して得られる投影面Ｒ上の座標値（Ｕ，Ｖ）を求める計算式を示した説明図である。ここで、図１２（ａ）中のα、β、γ、δは、視点Ｑから投影面Ｒ、あるいはオブジェクトまでの距離によって定まる係数である。あるいは、簡易的には、図１２（ｂ）に示すように、除算を含まない計算式を用いることもできる。ここで、図１２（ｂ）中のε、ζ、η、θ、ι、κは、それぞれ視点Ｑから投影面Ｒ、あるいはオブジェクトまでの距離によって定まる係数である。
【００６０】
また、詳細な説明は省略するが、レンダリング処理では、三次元空間内の予め設定された位置に光源を置いて、オブジェクト表面に陰影を付けるシェーディングと呼ばれる処理や、遠近感を強調するために、遠方にある部分ほど輝度を低下させたり、投影像をぼかす処理などが行われることもある。こうした一連の処理からなるレンダリング処理は、ＧＴＥ１１２がＣＰＵ１０１からの命令を受け取って、メインメモリ１１０に記憶されているポリゴンデータに対して所定の演算を実行し、得られた結果を用いて、メモリ上のポリゴンデータを更新することによって行われる。そして、モニタ１５０の画面に現れる全てのオブジェクトについて、以上のような処理を行ったら、図１０のステップＳ３０に示したレンダリング処理を終了する。
【００６１】
上述したレンダリング処理に続いて、ゲーム機１００のＣＰＵ１０１は、描画処理を開始する（図１０のステップＳ４０）。描画処理とは、レンダリング処理によって生成された投影像から、画素毎に階調値が設定された画像データを生成する処理である。すなわち、レンダリング処理で得られた投影像は、ポリゴンが投影された多角形の頂点の座標と、その多角形に付与すべきテクスチャ番号とを用いた形式で表現されている。これに対して、モニタ１５０上で表示可能な画像データは、画像を画素と呼ばれる微細な領域に細分し、画素毎に階調データ（通常は、輝度を表すデータ）を設定した形式で表現されている。各画素に１種類の輝度データを設定した場合には、モノクロ画像の画像データとなり、光の三原色を構成するＲＧＢ各色の輝度データを設定した場合には、カラー画像の画像データとなる。尚、ＲＧＢ各色の輝度データの代わりに、明度に対応する階調データと、色差に対応する２種類の階調データを用いてカラー画像を表現することも可能である。いずれにしても、レンダリング処理によって得られた投影像を表すデータは、そのままではモニタ１５０上に表示することができないので、モニタ１５０で表示可能なデータ形式に変換する処理を行う。このような処理が描画処理と呼ばれる処理である。また、図５を用いて前述したように、画面に二次元画像が嵌め込まれている場合は、描画処理の中で二次元画像のデータを嵌め込んでやればよい。
【００６２】
描画処理を開始すると、ゲーム機１００のＣＰＵ１０１は、ＧＰＵ１１６に向かって描画命令を出力する。この描画命令を受けて、ＧＰＵ１１６が画像データを生成してフレームバッファ１１４に記憶することによって描画処理が行われる。
【００６３】
図１３は、描画命令によって描画しようとする画像、すなわち、前述したレンダリング処理によって生成された投影像を、概念的に示した説明図である。また、図１４は、このような画像を描画するために、ＣＰＵ１０１からＧＰＵ１１６に向かって出力される描画命令のデータ構造を概念的に示した説明図である。先ず、図１３を参照しながら、描画の対象となる投影像について説明する。描画の対象となる投影像は、前述したように、オブジェクトを構成するポリゴンを投影面Ｒ上に投影することによって得られた二次元画像である。本実施例では、オブジェクトは全て三角形のポリゴンを用いて構成されているものとしているから、原則として全てのポリゴンが、三角形の画像として投影面Ｒ上に投影される。尚、ポリゴンとは、前述したようにオブジェクトを構成する平面多角形を指しており、ポリゴンが投影面Ｒに投影された多角形は、厳密にはポリゴンとは異なるものである。しかし、以下では説明の便宜から、このようなポリゴンの投影像も、ポリゴンと呼ぶことがあるものとする。また、特にこれらを区別する場合は、「オブジェクトを構成するポリゴン」、および「投影像を構成するポリゴン（あるいは二次元画像のポリゴン）」などと称することがあるものとする。
【００６４】
図１３に示されている投影像は、ポリゴン１、ポリゴン２、ポリゴン３の３つのポリゴンから構成されている。また、投影像がいずれも三角形のポリゴンによって構成されているのは、オブジェクトを構成するポリゴンが全て三角形のポリゴンによって構成されており、これら三角形のポリゴンを投影面Ｒ上に投影すると三角形の投影像が得られることに対応したものである。そして、図１１を用いて前述したように、これら投影像を構成するポリゴンには、オブジェクトを構成するポリゴンと同じテクスチャ番号が付与されている。
【００６５】
このような投影像を描画する場合、ＣＰＵ１０１は図１４に示すようなデータ構造の描画命令を出力する。図示されているように描画命令は、「ＣＯＤＥ」と、テクスチャ番号と、投影面Ｒ上での頂点の座標値とを一組とするデータが、投影像を構成するポリゴン毎に設定された構造となっている。ここで、「ＣＯＤＥ」は、この命令が描画命令であることを表すとともに、描画の対象としているポリゴンの形状を指定するデータとなっている。すなわち、オブジェクトを構成するポリゴンは、三角形に限らず、四角形や五角形などのポリゴンが使用される場合もあり、これに伴って投影像を構成するポリゴンの形状も変わってくる。また、オブジェクトのポリゴンが三角形であったとしても、一部が他のポリゴンの陰になった場合などには投影面Ｒの上のポリゴンを、例えば四角形のポリゴンとして扱うことも可能である。このようなことを考慮して、本実施例の描画命令では、ポリゴン毎にポリゴンの形状を指定可能となっているのである。
【００６６】
本実施例の描画命令には、「ＣＯＤＥ」に続いて、テクスチャ番号が設定されている。このテクスチャ番号は、投影像を構成するポリゴンに付与されているテクスチャ番号であり、ほとんどの場合は、オブジェクトを構成するポリゴンに付与されたテクスチャ番号と同じものとなる。尚、テクスチャ番号の代わりに、ポリゴンに付与すべき色情報（例えば、Ｒ，Ｇ，Ｂ各色の階調値）を設定しておくことも可能である。
【００６７】
テクスチャ番号に続いて、ポリゴンを構成する頂点の投影面Ｒ上での座標値が設定されている。頂点座標の個数は上述した「ＣＯＤＥ」によって決定される。例えば、「ＣＯＤＥ」においてポリゴンの形状が三角形と指定されている場合は、３つの頂点座標が設定され、四角形のポリゴンと指定されている場合は、４つの頂点座標が設定されることになる。描画命令は、このような「ＣＯＤＥ」、テクスチャ番号、頂点座標を一組とするデータが、投影像を構成するポリゴン毎に設定されたデータ構造となっている。
【００６８】
図１４に例示した描画命令では、描画の対象としている投影像が、ポリゴン１ないしポリゴン３の３つのポリゴンから構成されていることと対応して、「ＣＯＤＥ」、テクスチャ番号、頂点座標からなる三組のデータが設定されている。すなわち、ポリゴン１については、「ＣＯＤＥ」およびテクスチャ番号に続いて、ポリゴン１を構成する３つの頂点Ａ、Ｂ、Ｃの座標値が設定されている。また、ポリゴン２については、「ＣＯＤＥ」およびテクスチャ番号に続いて、ポリゴン２を構成する３つの頂点Ｂ、Ｃ、Ｄの座標値が設定され、ポリゴン３については、「ＣＯＤＥ」、テクスチャ番号に続いて、ポリゴン３を構成する３つの頂点Ｃ、Ｄ、Ｅの座標値が設定されている。これらポリゴンの頂点座標およびテクスチャ番号は、前述したレンダリング処理の中でＧＴＥ１１２によって生成された後、メインメモリ１１０に記憶されている。ＣＰＵ１０１は、メインメモリ１１０に記憶されているデータの中から、モニタ１５０の画面上に表示すべき全てのオブジェクトについて、これらのデータを読み出すことにより、図１４に示すようなデータ構造の描画命令を生成してＧＰＵ１１６に供給する。
【００６９】
ＧＰＵ１１６は、このような描画命令を受け取ると、各頂点を結んだ多角形の内部を、テクスチャ番号が示す色彩あるいは模様で塗り潰した二次元画像に展開する。そして、得られた二次元画像を、画像を構成する画素毎に階調データを設定した表現形式のデータに変換して、画像データとしてフレームバッファ１１４に記憶する。この結果、投影面Ｒ上でのポリゴンの頂点座標と、ポリゴンのテクスチャ番号とによって表現された投影像が、モニタ１５０で表示可能なデータ形式の画像データに変換されて、フレームバッファ１１４に記憶されたことになる。尚、本実施例のゲーム機１００では、Ｒ，Ｇ，Ｂ各色の階調値が画素毎に設定された画像データを生成するものとする。モニタ１５０の画面に現れる全ての投影像について、以上のような処理を行ったら、図１０のステップＳ４０に示した描画処理を終了する。
【００７０】
描画処理を終了すると、今度は、フレームバッファ１１４上に得られた画像データをモニタ１５０に出力して、モニタ１５０の画面を更新する処理を行う（ステップＳ５０）。すなわち、画面解像度や、インターレースあるいはノンインターレースと言った走査方式など、モニタ１５０の仕様に合わせて、フレームバッファ１１４から画像データを読み出してビデオ信号としてモニタ１５０に供給する。こうすることで、フレームバッファ１１４に展開した二次元画像をモニタ１５０の画面に表示させることができる。
【００７１】
また、モニタ１５０の表示を少なくとも１秒間に２４回以上の頻度で更新してやれば、人間の網膜が有する残像現象により、あたかも連続して動いているかのような画像を表示することができる。本実施例のゲーム機１００では、図１０に示したゲーム画面表示処理を１秒間に３０回程度の頻度で実行して画面の表示を更新することで、あたかもモニタ１５０の画面内で飛行艇ob1 などの各種オブジェクトが連続して動いているかのように表示することが可能となっている。そして、このような高速な処理を可能とするために、本実施例のゲーム機１００では、座標変換を始めとする各種の演算を高速に実行可能なＧＴＥ１１２や、演算に用いる大量のデータを高速に読み書き可能なメインメモリ１１０、ＣＰＵ１０１から受け取った描画命令に基づいて画像データを迅速に生成するＧＰＵ１１６、更には、生成した画像データを高速に記憶するとともにモニタ１５０に高速に出力可能なフレームバッファ１１４などが搭載されている。
【００７２】
もっとも、処理対象とするポリゴン数があまりに多くなると、図１０に示したゲーム画面表示処理を、１秒間に３０回程度の頻度で実行することは困難となる。そこで、飛行艇ob1 を始めとする各種のオブジェクトは、ポリゴン数があまり多くならないように、若干大きめのポリゴンによって構成されている。前述したようにポリゴンは平面多角形なので、ポリゴンが大きくなると、オブジェクトの表面がゴツゴツしてしまうという弊害がある。しかし、幸いにも、ゲームの画面ではオブジェクトは動いていることが多く、加えて、モニタ１５０は写真の様には高い描画力を有していないため、オブジェクト表面がゴツゴツしていることが目立つことはなく、従って、ゲームの臨場感を損なってしまうといった弊害が生じることはない。
【００７３】
しかし、モニタ１５０の画面を印刷装置で印刷すると、こうした状況は一変することがある。すなわち、印刷して得られる画像は静止画像であることに加えて、近年の印刷装置は写真に迫る高い描画力を有していることから、印刷画像を見ればオブジェクトの表面がゴツゴツしていることがハッキリと分かってしまうことがある。そして、このような印刷画像を見てしまった後では、たとえゲーム中のモニタ１５０に表示されたオブジェクトでさえも、表面がゴツゴツしている様に見えてしまい、ゲームの臨場感が大きく損なわれてしまう畏れも生じる。これに対して本実施例のゲーム機１００では、モニタ１５０の画面を印刷装置で出力した場合でも、あたかも実物を写真で撮影したかのような、鮮明な画像を出力することが可能となっている。以下では、こうしたことを可能とする処理について詳しく説明する。
【００７４】
Ｃ．第１実施例  ：
Ｃ−１．画像印刷処理  ：
図１５は、第１実施例のゲーム機１００によって行われる画像印刷処理の流れを示すフローチャートである。以下、フローチャートに従って、画像印刷処理について説明する。
【００７５】
ゲーム機１００のＣＰＵ１０１は、コントローラ１０２に設けられた所定の印刷ボタンが押されたことを検出すると、割り込みを発生させて、図１５に示す画像印刷処理を開始する。尚、割り込みを発生させると、それまでＣＰＵ１０１が行っていた処理は一旦中断され、これに伴ってゲームの進行も、画像印刷処理を終了するまで中断されることになる。
【００７６】
画像印刷処理を開始すると、先ず初めにＣＰＵ１０１は、コントローラ１０２の印刷ボタンが押された時点でモニタ１５０に表示されていた画像の、元となったポリゴンデータ（表示用ポリゴンデータ）を取得する（ステップＳ１００）。すなわち、前述したように、モニタ１５０に表示される画像は、オブジェクトを投影面Ｒに投影して得られた画像であり、オブジェクトを構成するポリゴンの頂点の座標値はポリゴンデータとして、メインメモリ１１０に記憶されている。そこで、ステップＳ１００では、コントローラ１０２の印刷ボタンが押された時点でモニタ１５０に表示されている各オブジェクトについて、オブジェクトの表示に用いられた表示用ポリゴンデータを取得する。
【００７７】
次いで、画像の撮影条件を設定する処理を開始する（ステップＳ１０２）。すなわち、本実施例のゲーム機１００では、モニタ１５０に表示された画面を単にカラープリンタ２００で印刷するだけではなく、あたかもカメラを操作して写真を撮影するかのように、印刷画像を構成することも可能となっている。ステップＳ１０２では、そのためにゲーム機１００に対して撮影条件を設定する処理を行う。撮影条件の設定は、ゲーム機１００の操作者が、モニタ１５０に表示された画面を確認しながら行うことができる。
【００７８】
図１６は、画像の撮影条件を設定するための画面が、モニタ１５０に表示されている様子を例示した説明図である。図示されているように、撮影条件を設定する画面のほぼ中央には、印刷ボタンを押したときにモニタ１５０に表示されていた画面を表示するモニタ領域１５１が設けられている。また、モニタ領域１５１の周辺には、焦点距離や、絞り、焦点を合わせる位置などを設定するボタンが設けられている。
【００７９】
焦点距離の設定は、モニタ領域１５１の右側に設けられたツマミ１５３を上下に動かすことで、望遠から広角までの焦点距離を選択することによって行う。また、絞りの設定は、モニタ領域１５１の右下に設けられたツマミ１５４を上下に動かすことで、開放側から絞り側までの絞り値を選択することで行う。また、焦点を合わせる位置の設定は、コントローラ１０２の十字カーソルを操作しながら、モニタ領域１５１に表示されているカーソル１５２を、焦点を合わせたい位置まで移動した後、設定画面上の「焦点位置設定」と表示されたボタンを押すことによって設定することができる。こうした設定した撮影条件による効果は、モニタ領域１５１に表示されている画像に反映されるので、効果を確認しながら撮影条件を設定することができる。そして、所望の撮影条件が決まったら、設定画面上の「ＯＫ」と表示されたボタンを押すことによって、設定した撮影条件を確定することができる。図１５に示した画像印刷処理のステップＳ１０２では、以上のようにして、各種の撮影条件を設定する処理を行う。
【００８０】
ゲーム機１００のＣＰＵ１０１は、撮影条件を設定したら、続いて印刷条件を設定する処理を開始する（ステップＳ１０４）。この印刷条件設定処理も、上述したステップＳ１０２の撮影条件設定処理と同様に、ゲーム機１００の操作者が、モニタ１５０に表示された画面を確認しながら行うことができる。
【００８１】
図１７は、画像の印刷条件を設定するための画面が、モニタ１５０に表示されている様子を例示した説明図である。図示されているように、本実施例のゲーム機１００では、印刷条件として、印刷に用いる用紙サイズ、用紙種類、および印刷に際しての印刷モードの３つの項目を設定することが可能となっている。ここで、印刷モードとは、印刷を行うに際して印刷速度を優先させるか、印刷画質を優先させるかを設定するモードである。すなわち、一般的に、印刷速度と印刷画質とは相反する関係にあり、迅速に印刷しようとすると画質が低下し、高画質に印刷しようとすると印刷時間が長くなる傾向にある。そこで、特に迅速に印刷したい場合、あるいは特に高画質に印刷したい場合には、それぞれ印刷モードを「速い」あるいは「きれい」に設定することで、望んだ通りの印刷が行えるようになっているのである。
【００８２】
用紙サイズ及び用紙種類の設定は、コントローラ１０２の十字カーソルを操作することにより、画面上に表示されたカーソル１５２を用いて用紙サイズを選択することによって行う。また、印刷モードについては、画面に表示されたツマミ１５８を「きれい」から「速い」までの間で動かすことによって設定することができる。また、これらの条件に加えて、印刷枚数や、いわゆる縁なし印刷を行うか否か、といった項目を設定可能としても良い。以上のようにして、印刷条件を設定したら、設定画面上の「ＯＫ」と表示されたボタンを押すことによって、設定した印刷条件を確定する。
【００８３】
以上のようにして、モニタ１５０に表示された画面の撮影条件および印刷条件を設定したら、印刷用ポリゴンデータが記憶されているか否かを判断する（ステップＳ１０６）。ここで、印刷用ポリゴンデータとは、前述したゲーム画面表示処理で用いたポリゴンよりも小さなポリゴンを用いて、オブジェクトの三次元形状を表したデータである。
【００８４】
図１８は、メインキャラクタである飛行艇ob1 の三次元的な形状が、小さなポリゴンを用いて表現されている様子を概念的に表した説明図である。図７と図１８とを比較すれば、ゲーム画面表示処理で用いたポリゴンデータと比べて、印刷用ポリゴンデータは小さなポリゴンが用いられていることが分かる。また、オブジェクト表面の曲率が大きい（曲率半径が小さい）部分ほど、小さなポリゴンによって構成されていることが分かる。このように、小さなポリゴンを用いれば、オブジェクトの形状をより正確に表現することができ、表面の曲率が大きな部分でも、見る者にゴツゴツした印象を与えることがない。
【００８５】
また、印刷用ポリゴンデータにも、図７および図９に示した画面の表示に用いられる通常のポリゴンデータ（表示用ポリゴンデータ）と同様に、複数（本実施例では３つ）の基準点が設けられている。これら基準点は、印刷用ポリゴンデータの場合でも、表示用ポリゴンデータの場合でも、オブジェクトに対する位置関係では同じ位置に設けられている。例えば、図７に示したように、飛行艇ob1 の表示用ポリゴンデータでは、機体の先端と、左右の尾翼の後端とに、それぞれ基準点Ｐ１、Ｐ２、Ｐ３が設けられている。これと同様に、飛行艇ob1 の印刷用ポリゴンデータでも、機体先端と、左右の尾翼の後端とに、それぞれ基準点Ｐ１、Ｐ２、Ｐ３が設けられている。このように、印刷用ポリゴンデータが存在するオブジェクトについては、表示用ポリゴンデータおよび印刷用ポリゴンデータのそれぞれについて、オブジェクトに対して同じ位置に基準点が設けられている。逆に言えば、印刷用ポリゴンデータが存在しないオブジェクトについては、オブジェクトデータに必ずしも基準点が設定されている必要はない。
【００８６】
このような印刷用ポリゴンデータが存在するか否かは、印刷用ポリゴンデータの有無が予め設定されたテーブル（印刷用ポリゴンデータテーブル）を参照することによって判断することができる。図１９は、印刷用ポリゴンデータの有無を判断するために参照されるテーブルを概念的に示した説明図である。図示されているように、印刷用ポリゴンデータテーブルには、印刷用ポリゴンデータが存在するオブジェクトのオブジェクト番号と、ポリゴン数とが設定されている。従って、印刷用ポリゴンデータテーブルを参照してオブジェクト番号が設定されていれば、そのオブジェクトについては印刷用ポリゴンデータが存在すると判断することができる。逆に、印刷用ポリゴンデータテーブルにオブジェクト番号が設定されていなければ、そのオブジェクトについては、印刷用ポリゴンデータは存在しないと判断することができる。
【００８７】
尚、図８を用いて前述したオブジェクトテーブルには、全てのオブジェクトについて、固有のオブジェクト番号と、ポリゴンデータの先頭アドレスとが設定されていた。これに対して印刷用ポリゴンデータテーブルでは、複数のオブジェクト番号に対して同じ先頭アドレスが設定される場合がある。例えば、図４に示したように、オブジェクトob4 〜ob9 の６つのオブジェクトは何れも飛行円盤を表しており、これら飛行円盤は同じ形状となっている。このような場合、印刷用ポリゴンデータテーブルには、図１９に示すように、オブジェクト番号ob4 〜ob9 の６つのオブジェクトについては、同じ先頭アドレスおよびポリゴン数が設定される。このように、印刷用ポリゴンデータテーブルでは、異なるオブジェクト番号に対しても、同じ先頭アドレスおよびポリゴン数が設定されることがある理由については、後述する。
【００８８】
図１５のステップＳ１０６において、印刷用ポリゴンデータが存在すると判断されたオブジェクトについては、図１９に示した印刷用ポリゴンデータテーブルを参照して印刷用ポリゴンデータを読み込んでやる（ステップＳ１０８）。読み込んだ印刷用ポリゴンデータは、メインメモリ１１０の連続するアドレスに記憶する。次いで、ステップＳ１００で先に取得しておいた表示用ポリゴンデータの基準点と、読み込んだ印刷用ポリゴンデータの基準点とを一致させた後、表示用ポリゴンデータを印刷用ポリゴンデータで差し替える処理を行う（ステップＳ１１０）。以下、この処理の内容について詳しく説明する。尚、読み込まれた印刷用ポリゴンデータは、メインメモリ１１０上のアドレス値Ａppd 以降の連続した領域に記憶されているものとする。
【００８９】
先ず、読み出した印刷用ポリゴンデータに対して、オブジェクトを移動あるいは回転させる座標変換を行うことにより、印刷用ポリゴンデータの基準点の座標を、ステップＳ１００で取得しておいた表示用ポリゴンデータの基準点の座標に一致させる。このような座標変換は、図１９に示した印刷用ポリゴンデータテーブルの先頭アドレスで示されているデータに対して行うのではなく、この印刷用ポリゴンデータを読み出してメインメモリ１１０のアドレスＡppd 以降に展開したデータに対して実行する。そして、印刷用ポリゴンデータの基準点の座標を、表示用ポリゴンデータの基準点の座標と一致させたら、メインメモリ１１０上で、この印刷用ポリゴンデータが記憶されているメモリ領域の先頭アドレスＡppd および印刷用ポリゴンデータを構成するポリゴン数によって、図８を用いて前述したオブジェクトテーブルの先頭アドレスおよびポリゴン数を書き換えてやる。このようにオブジェクトテーブルに設定されている先頭アドレスおよびポリゴン数を書き換えておけば、続いて実行するレンダリング処理および描画処理においては、表示用ポリゴンデータではなく、印刷用ポリゴンデータが参照されることになる。図１５のステップＳ１１０において、表示用ポリゴンデータを印刷用ポリゴンデータで差し替える処理とは、具体的には、このようにオブジェクトテーブルに設定されている先頭アドレスおよびポリゴン数を、位置合わせした印刷用ポリゴンデータの先頭アドレスおよびポリゴン数に書き換える処理のことである。
【００９０】
ここで、図１９に示したように、印刷用ポリゴンデータテーブルでは、異なるオブジェクト番号に対しても、同じ先頭アドレスおよびポリゴン数が設定されることがある理由について説明する。上述したように、印刷用ポリゴンデータが存在するオブジェクトについては、印刷用ポリゴンデータを読み込んだ後、基準点の座標が表示用ポリゴンデータの基準点の座標に一致するように、印刷用ポリゴンデータを移動あるいは回転させる。ここで、異なるオブジェクトは必ず異なる三次元座標値を持っているから、たとえ同じアドレス値から印刷用ポリゴンデータを読み込んだ場合でも、移動あるいは回転後は、異なった印刷用ポリゴンデータとなっている。従って、オブジェクト毎にメインメモリ１１０の異なる領域でこうした操作を行っておけば、元の印刷用ポリゴンデータは同じデータを使用することが可能であり、このため、印刷用ポリゴンデータテーブルでは、同じ形状のオブジェクトについては、同じ先頭アドレスおよびポリゴン数が設定されているのである。
【００９１】
尚、全ての表示用ポリゴンデータに印刷用ポリゴンデータが記憶されているわけではないから、印刷用ポリゴンデータに差し替えられる表示用ポリゴンデータは、一部のポリゴンデータのみである。すなわち、差し替え後のポリゴンデータは、表示用ポリゴンデータと印刷用ポリゴンデータとが混在したデータとなっている。そこで以下では、このようなポリゴンデータを、精密ポリゴンデータと呼ぶことがあるものとする。
【００９２】
以上のようにして、印刷用ポリゴンデータが存在するオブジェクトについては、表示用ポリゴンデータを印刷用ポリゴンデータに差し替えて精密ポリゴンデータを生成した後、今度は、レンダリング処理を開始する（ステップＳ１１２）。前述したようにレンダリング処理とは、各オブジェクトのポリゴンデータから二次元画像のデータを生成する処理である。かかる処理は、図１１を用いて前述したように、視点Ｑと各オブジェクトとの間に設定した投影面Ｒへの、各オブジェクトの投影像を算出することによって行うことができる。レンダリング処理については、図１１および図１２を用いて既に説明しているため、ここでは詳細な説明は省略するが、撮影条件設定処理で設定された内容は、レンダリング処理における視点Ｑおよび投影面Ｒの設定に反映される。また、視点Ｑに対して遠方あるいは近くにあるオブジェクトに対しては、絞りの設定に応じて、投影像をぼやかすようなフィルタを施すなどの特殊な操作が行われることもある。
【００９３】
図１０を用いて前述したゲーム画面表示処理と同様に、レンダリング処理は、ＣＰＵ１０１の制御の下でＧＴＥ１１２がオブジェクトテーブルを参照しながら実行し、得られた二次元画像のデータはメインメモリ１１０に記憶される。尚、ステップＳ１０６において、印刷用ポリゴンデータが存在すると判断されたオブジェクトについては、続くステップＳ１１０においてオブジェクトテーブル（図８参照）が書き換えられていることから、図１５のステップＳ１２２で行われるレンダリング処理は、コントローラ１０２の印刷ボタンを押したときにモニタ１５０に表示されていた表示用ポリゴンデータではなく、一部が印刷用ポリゴンデータに置き換えられた精密ポリゴンデータに対してレンダリング処理が実行される。
【００９４】
こうしてレンダリング処理を終了すると、今度は、メインメモリ１１０上に記憶されているデータを読み出して、印刷データとしてカラープリンタ２００に出力する処理を開始する（ステップＳ２００）。かかる印刷データ出力処理については、後ほど詳しく説明するが、大まかには次のような処理を行う。
【００９５】
先ず、レンダリング処理によって得られるデータは、投影面上に投影された二次元的なポリゴンの各頂点の座標値と、そのポリゴンに付与すべきテクスチャ番号とを示すデータである。しかし、カラープリンタ２００は、画素毎の階調データによって表現された形式でデータを受け取ることから、図１０を用いて前述したゲーム画面表示処理と同様に、描画処理を行って、レンダリング処理によって得られたデータを、画素毎の階調データによって表現されたデータに展開しておく必要がある。こうして展開された画素毎の階調データは、画面の表示時と同様にフレームバッファ１１４に記憶される。
【００９６】
ここで、上述したように、画像の印刷時には表示用ポリゴンデータが印刷用ポリゴンデータに差し替えられているために、ポリゴン数が増加している。このため、フレームバッファ１１４のメモリ容量の関係で、全てのポリゴンのデータを一度に展開することはできず、複数回に分割して展開する必要がある。そこで、印刷データ出力処理（図１５のステップＳ２００）では、精密ポリゴンデータをレンダリング処理することによって得られたデータを、先ず、メインメモリ１１０からポリゴン所定個数分だけ読み出して描画処理を行い、フレームバッファ１１４上に展開する。そして、得られたデータを印刷データとしてカラープリンタ２００に出力した後、再び、レンダリング処理済みのデータをポリゴン所定個数分だけメインメモリ１１０から読み出して、フレームバッファ１１４に展開する。こうした操作を繰り返すことによって、フレームバッファ１１４のメモリの制約の範囲で少しずつ描画処理を行いながら、印刷データをカラープリンタ２００に出力する処理を行うのである。印刷データ出力処理の詳細な内容については後述する。
【００９７】
全ての印刷データをカラープリンタ２００に出力したら、印刷データ出力処理を終了して、図１５の画像印刷処理に復帰する。続いて、画像印刷処理では、ゲーム復帰処理を行う（ステップＳ１１４）。ゲーム復帰処理は、画像印刷処理を終了して、ゲームを再開するための処理である。すなわち、上述した画像印刷処理は、前述したようにコントローラ１０２の印刷ボタンが押されると、ゲーム機１００のＣＰＵ１０１が割り込みを発生させて、進行中のゲームを一旦、中断した状態で開始される。そこで、画像印刷処理の終了に先立って、ＣＰＵ１０１は、プログラムカウンタや各種データを、ゲームの中断前の状態に復帰させて、ゲームを再開するための準備を行うのである。前述したように、精密ポリゴンデータが存在するオブジェクトについては、画像印刷処理の中でオブジェクトテーブルの設定値も書き換えられているので、これらについても、ゲーム復帰処理で元の設定値に戻されることになる。
【００９８】
こうしてゲーム復帰処理を終了したら（ステップＳ１１４）、図１５に示した画像印刷処理を終了する。プログラムカウンタを始めとする各種の変数およびデータは、ゲーム中断前の状態に戻っているので、中断したところからゲームを再開することが可能となる。
【００９９】
Ｃ−２．印刷データ出力処理  ：
図２０は、印刷データ出力処理の流れを示すフローチャートである。かかる処理は、図１５を用いて前述した画像印刷処理の中で、ＣＰＵ１０１によって実行される処理である。以下、フローチャートに従って説明する。
【０１００】
印刷データ出力処理を開始すると、先ず初めに、メインメモリ１１０から精密ポリゴンデータを所定ポリゴン数分だけ読み込む処理を行う（ステップＳ２０２）。すなわち、フレームバッファ１１４のメモリ容量の制約から、精密ポリゴンデータに含まれる全てのポリゴンに対して描画命令を行うことはできないので、メモリ容量の許容範囲内で描画命令を実行するべく、次のようにして、所定数ずつポリゴンのデータを読み出してやるのである。
【０１０１】
図２１は、精密ポリゴンデータから所定数のポリゴンのデータを読み出す様子を示す説明図である。図１５を用いて前述したように、印刷データ出力処理に先立って行われるレンダリング処理では、三次元的なオブジェクトを構成するポリゴンのデータから、二次元的な投影像を構成するポリゴンのデータが生成されて、メインメモリ１１０上に記憶されている。図２１に破線で示されている三角形は、レンダリング処理によって生成された投影像を構成するポリゴンを概念的に表したものである。尚、実際の画像はもっと小さなポリゴンによって表現されているが、ここでは図示が煩雑となることを避けるために、大きなポリゴンを用いて表現されている。
【０１０２】
また、図２１中では、比較的小さなポリゴンばかりで構成された領域と、比較的大きなポリゴンばかりで構成された領域とが存在している。これは、前述した画像印刷処理において一部が印刷用ポリゴンデータに差し換えられており、得られた精密ポリゴンデータに対してレンダリング処理が行われていることに対応したものである。すなわち、図中で、小さなポリゴンばかりで構成されている領域は、印刷用ポリゴンデータに差し換えられたオブジェクトに対してレンダリング処理が施されて生成されたことを概念的に表したものである。また、大きなポリゴンばかりで構成された領域は、表示用ポリゴンデータで表現されたオブジェクトに対してレンダリング処理が施されて生成されたことを概念的に表したものである。
【０１０３】
図２０に示した印刷データ出力処理においてポリゴンデータを読み出す処理（ステップＳ２０２）では、ポリゴンの読み取りラインを設定し、この読み取りラインの設定位置を移動させながら、所定ポリゴン数ずつポリゴンデータを読み取る処理を行う。図２１では、ポリゴンの読み取りラインは太い一点鎖線で示されている。また、ポリゴンの読み取りラインは、初めは画像の上端部分に設定され、ポリゴンデータの読み取りが進むに従って、順次、読み取りラインが下方に移動していく。これは、実際に画像を印刷するカラープリンタ２００では、画像の印刷は上端から下端に向かって行われることに対応したものである。
【０１０４】
図２１（ａ）は、印刷データ出力処理を開始した直後で、先ず初めに、ポリゴンの読み取りラインが画像の上端に設定された状態を概念的に表したものである。精密ポリゴンデータを読み込む処理では、設定した読み取りラインが通過するポリゴンを検出して、これらポリゴンのデータを読み出していく。図２１（ａ）に示した例では、こうして読み出されたポリゴンは、ハッチングを付して表示されている。また、説明の便宜上、各ポリゴンには、ポリゴンを読み出した順序を示す番号を付して表示している。ポリゴンに付した番号を見れば明らかなように、図２１（ａ）に設定した読み取りラインの位置では、１４個分のポリゴンのデータを読み出したことになる。
【０１０５】
ここで、読み出し可能なポリゴン数には上限が存在している。これは、読み出したポリゴンデータに対して描画命令が実行されると、画素毎の階調データに変換された画像データがフレームバッファ１１４上に展開されるので、ポリゴン数があまりに多くなると、フレームバッファ１１４のメモリ容量の制約から画像データを展開できなくなってしまうためである。実際には、読み出し可能なポリゴン数は、図１０に示したゲーム画面表示処理中で、モニタ１５０に表示される一画面を構成するためには、十分なポリゴン数に設定されているが、ここでは説明の便宜から、一度に読み出し可能なポリゴン数が「２０」であるものとする。
【０１０６】
ポリゴンの読み取りラインが、図２１（ａ）に示した位置に設定されている場合は、読み出されるポリゴン数は１４個であるから、あとポリゴン６個分のデータを読み出すことが可能である。そこで、読み取りラインの位置を少しずつ下方に移動させて、新たなポリゴンのデータを読み出しながら、２０個分のポリゴンのデータを読み出してやる。図２１（ｂ）は、このようにして、２０個分のポリゴンのデータを読み出した様子が概念的に示されている。すなわち、ポリゴンの読み取りラインの位置を図２１（ａ）に示した位置から少しずつ下げていくと、先ず初めに、図２１（ｂ）中で「１５番」、「１６番」、「１７番」と符番したポリゴンのデータが読み出される。更に、読み取りラインを下げていくと、今度は「１８番」、「１９番」と符番したポリゴンのデータが読み出される。そして、図２１（ｂ）に示した位置まで読み取りラインを下げると、「２０番」目のポリゴンのデータが読み出されることになる。また、この時の読み取りライン上には、「２１番」と符番したポリゴンや、「２２番」と符番したポリゴンも存在する。しかし、読み出したポリゴン数が既に「２０」に達しているので、これら２つのポリゴンについてはデータの読み出しは行わない。図２０に示した印刷データ出力処理のステップＳ２０２では、このようにして、所定ポリゴン数（図２１に示した例では、２０個）ずつ、精密ポリゴンデータを読み出す処理を行うのである。
【０１０７】
こうして読み出したポリゴンデータに対して描画処理を行うことにより、画素毎の階調データに展開した画像データをフレームバッファ１１４上に記憶する（ステップＳ２０４）。描画処理の内容については、図１３および図１４を用いて既に詳細に説明しているため、ここでは説明を省略する。
【０１０８】
次いで、フレームバッファ１１４上に展開した画像データを、ラスタ単位でカラープリンタ２００に出力する処理を行う（図２０のステップＳ２０６）。図２２は、フレームバッファ１１４上の画像データをラスタ単位で出力する様子を示す説明図である。先ず、所定ポリゴン数だけ読み出されたポリゴンデータに対して描画処理が実行されると、各ポリゴンに含まれる画素にポリゴンのテクスチャ番号に応じた階調データが付与されて、フレームバッファ１１４上に展開される。図２２（ａ）は、こうしてフレームバッファ１１４上に画像データが展開されている様子を概念的に示したものである。ここでは、図２１（ｂ）中でハッチングを付して示したポリゴンが読み出されているものとしているから、このポリゴンが存在する領域内の各画素について、画像データが展開されることになる。
【０１０９】
次いで、展開された画像データを、画像の上端の画素から一列分ずつ読み出して、カラープリンタ２００に出力する。すなわち、図２２（ａ）にハッチングを付して示した領域から、画像の上端の画素一列分の画像データを読み出してカラープリンタ２００に出力し、次は、上端から２列目にある画素の画像データを読み出してカラープリンタ２００に出力する。次いで、上端から３列目にある画素の画像データを読み出して出力する。このような一列分の画素はラスタと呼ばれる。従って、フレームバッファ１１４上に展開された画像データが、ラスタ単位でカラープリンタ２００に出力されることになる。
【０１１０】
図２２（ｂ）は、フレームバッファ１１４上に展開された画像データを、ラスタ単位で出力する様子を概念的に示した説明図である。図中で細かいハッチングを付した部分は、ラスタ単位で画像データを出力可能な領域である。ところが、この領域の一列下のラスタ（図中では太い破線によって表示）については、画像データが展開されていない画素が含まれており、ラスタ単位で画像データを出力することはできない。そこで、図２０のステップＳ２０６では、このような画像データの欠落したラスタが発生するまで、フレームバッファ１１４上に展開された画像データをラスタ単位で読み出して、印刷データとしてカラープリンタ２００に出力する処理を行う。
【０１１１】
以上のようにして、ラスタ単位の画像データを印刷データとして出力したら、レンダリング処理が施された精密ポリゴンデータの全ポリゴンについて、処理が終了したか否かを判断する（ステップＳ２０８）。そして、未だ処理していないポリゴンが残っている場合は（ステップＳ２０８：ｎｏ）、ステップＳ２０２に戻って、メインメモリ１１０上に記憶されている精密ポリゴンデータから、新たに所定ポリゴン数のデータを読み出してやる。
【０１１２】
図２３は、こうしてメインメモリ１１０上に記憶されている精密ポリゴンデータから、新たなポリゴンのデータを読み出した様子を示した説明図である。前述したように、ポリゴンのデータを読み出すに際しては、先ず初めにポリゴンの読み取りラインを設定する。ここでは、前回の処理でポリゴンデータを読み出しているから、その時に設定した読み取りラインの位置から開始する。図２３中に一点鎖線で示した読み取りラインは、前回の処理で最後に読み取りラインが設定された位置（すなわち、図２１（ｂ）に示した位置）を示している。
【０１１３】
そして、このような読み取りラインが通過するポリゴンを検出して、検出したポリゴンについてのポリゴンデータを読み出してやる。読み出したポリゴン数が所定数（ここでは、２０個）に満たない場合は、読み取りラインの位置を下方に向かって移動させながら、所定個数分のポリゴンのデータを読み出してやる。このようにして、図２３にハッチングで示したポリゴンについてのデータが、メインメモリ１１０上から読み出されることになる。次いで、このポリゴンデータに対して描画処理を行い（図２０のステップＳ２０４）、フレームバッファ１１４上に展開された画像データをラスタ単位で読み出して印刷データとしてカラープリンタ２００に出力した後（ステップＳ２０６）、全ポリゴンについての処理を終了したか否かを判断する（ステップＳ２０８）。そして、未処理のポリゴンが残っている場合は（ステップＳ２０８：ｎｏ）、再び、ステップＳ２０２に戻って新たなポリゴンデータを読み出してやる。その結果、今度は、図２４にハッチングで示したポリゴンについてのポリゴンデータが読み出されることになる。
【０１１４】
図２０印刷データ出力処理では、全ポリゴンについての処理を終了するまで、こうした処理を繰り返す。そして、最終的に、全ポリゴンについての処理を終了したと判断されたら（ステップＳ２０８：ｙｅｓ）、印刷データ出力処理を終了して、図１５に示した画像印刷処理に復帰する。
【０１１５】
図１５を用いて前述したように、画像印刷処理では、印刷データ出力処理から復帰すると、ゲームを再開するためにゲーム復帰処理（図１５のステップＳ１１４）を行った後、中断したゲームを再開させる。その結果、中断したところからゲームが再開されることになる。
【０１１６】
Ｃ−３．印刷処理  ：
一方、カラープリンタ２００は、このようにしてゲーム機１００から供給された印刷データに従って、印刷用紙上に画像を印刷する。以下では、カラープリンタ２００が、印刷データを受け取って画像を印刷する処理について簡単に説明する。尚、以下では、印刷処理は、カラープリンタ２００に搭載されたＣＰＵによって実行されるものとして説明するが、カラープリンタ２００では、後述するインターレース処理や、ドットを形成する処理のみを行い、他の処理についてはゲーム機１００の側で行うこととしても良い。
【０１１７】
図２５に示した印刷処理を開始すると、カラープリンタ２００に搭載されたＣＰＵは、先ず初めに、ゲーム機１００から出力されてきた印刷データを読み込む処理を行う（ステップＳ３００）。次いで、解像度変換処理を開始する（ステップＳ３０２）。解像度変換処理とは、フレームバッファ１１４上に展開されて、印刷データとして供給された画像データの解像度を、カラープリンタ２００が実際に画像を印刷しようとする解像度（印刷解像度）に変換する処理である。そして、画像データの解像度よりも印刷解像度の方が高い場合は、補間演算を行って画素間に新たな画像データを生成することにより解像度を増加させる。逆に、画像データの解像度の方が印刷解像度よりも高い場合は、読み込んだ画像データを一定の比率で間引くことによって解像度を低下させる。解像度変換処理では、ゲーム機１００から供給された印刷データに対して、このような操作を行うことにより、画像データの解像度を印刷解像度に変換する。
【０１１８】
こうして画像データの解像度を印刷解像度に変換したら、今度は、色変換処理を行う（ステップＳ３０４）。色変換処理とは、Ｒ，Ｇ，Ｂの階調値の組合せによって表現されているＲＧＢカラー画像データを、印刷のために使用される各色の階調値の組合せによって表現された画像データに変換する処理である。前述したように、本実施例のゲーム機１００では、画素毎にＲ，Ｇ，Ｂ各色の階調値が設定された画像データを生成しているのに対して、カラープリンタ２００は、図２に示した様に、Ｃ，Ｍ，Ｙ，Ｋの４色のインクを用いて画像を印刷する。そこで、ＲＧＢ各色によって表現された画像データを、Ｃ，Ｍ，Ｙ，Ｋの各色の階調値によって表現されたデータに変換する処理（色変換処理）を行うのである。
【０１１９】
色変換処理は、色変換テーブル（ＬＵＴ）を参照することで、迅速に行うことができる。図２６は、色変換処理のために参照されるＬＵＴを概念的に示した説明図である。ＬＵＴとは、次のように考えれば、三次元の数表の一種と考えることができる。先ず、図２６示されているように、直交する３つの軸にＲ軸、Ｇ軸、Ｂ軸を取って色空間を考える。すると、全てのＲＧＢ画像データは、必ず色空間内の座標点に対応付けて表示することができる。このことから、Ｒ軸、Ｇ軸、Ｂ軸のそれぞれを細分して色空間内に多数の格子点を設定してやれば、それぞれの格子点はＲＧＢの画像データを表していると考えることができ、ＲＧＢの画像データに対応するＣ，Ｍ，Ｙ，Ｋ各色の階調値を、各格子点に対応付けてやることができる。ＬＵＴは、こうして色空間内に設けた格子点に、Ｃ，Ｍ，Ｙ，Ｋ各色の階調値を対応付けて記憶した３次元の数表の様なものである。ＬＵＴに記憶されているＲＧＢの画像データとＣ，Ｍ，Ｙ，Ｋ各色の階調データとの対応関係に基づいて色変換処理を行えば、ＲＧＢ各色の階調値によって表現された画像データを、Ｃ，Ｍ，Ｙ，Ｋ各色の階調データに迅速に変換することが可能となる。
【０１２０】
以上のようにして色変換処理を行ったら、カラープリンタ２００に搭載されたＣＰＵは、ハーフトーン処理を開始する（ステップＳ３０６）。ハーフトーン処理とは、次のような処理である。色変換処理によって得られた画像データは、データ長を１バイトとすると、画素毎に、階調値０から階調値２５５までの値を取り得る階調データである。これに対してカラープリンタ２００はドットを形成することによって画像を表示しているから、それぞれの画素については「ドットを形成する」か「ドットを形成しない」かのいずれかの状態しか取り得ない。このためカラープリンタ２００では、画素毎の階調値を変化させる代わりに、所定領域内で形成されるドットの密度を変化させることによって中間階調を表現している。ハーフトーン処理とは、画像データの階調値に応じて適切な密度でドットが発生するように、画素毎にドット形成の有無を判断する処理である。
【０１２１】
階調値に応じた適切な密度でドットを発生させる手法としては、誤差拡散法やディザ法などの種々の手法を適用することができる。誤差拡散法は、ある画素についてドットの形成有無を判断したことでその画素に発生する階調表現の誤差を、周辺の画素に拡散するとともに、周囲から拡散されてきた誤差を解消するように、各画素についてのドット形成の有無を判断していく手法である。発生した誤差を周辺の各画素に拡散させる割合は、誤差拡散マトリックスに予め設定されている。また、ディザ法は、ディザマトリックスに設定されている閾値と画像データの階調値とを画素毎に比較して、画像データの方が大きい画素にはドットを形成すると判断し、逆に閾値の方が大きい画素についてはドットを形成しないと判断することで、各画素についてドット形成の有無を判断していく手法である。本実施例の印刷処理では、いずれの手法を用いることもできるが、ここではディザ法と呼ばれる手法を用いてハーフトーン処理を行うものとする。
【０１２２】
図２７は、ディザ法で参照される一般的なディザマトリックスの一部を拡大して例示した説明図である。図示したマトリックスには、縦横それぞれ６４画素、合計４０９６個の画素に、階調値０〜２５５の範囲から万遍なく選択された閾値が設定されている。ここで、閾値の階調値が０〜２５５の範囲から選択されているのは、本実施例では画像データが１バイトデータであり、画素に設定される階調値が０〜２５５の値を取り得ることに対応するものである。尚、ディザマトリックスの大きさは、図２７に例示したように縦横６４画素分に限られるものではなく、縦と横の画素数が異なるものも含めて種々の大きさとすることができる。
【０１２３】
図２８は、ディザマトリックスを参照しながら、画素毎にドット形成の有無を判断している様子を概念的に示した説明図である。ドット形成有無の判断に際しては、先ず、判断の対象として着目している画素（着目画素）についての画像データの階調値と、ディザマトリックス中の対応する位置に記憶されている閾値とを比較する。図中に示した細い破線の矢印は、着目画素の階調値を、ディザマトリックス中の対応する位置に記憶されている閾値と比較していることを模式的に表したものである。そして、ディザマトリックスの閾値よりも着目画素の階調値の方が大きい場合には、その画素にはドットを形成するものと判断する。逆に、ディザマトリックスの閾値の方が大きい場合には、その画素にはドットを形成しないものと判断する。
【０１２４】
図２８に示した例では、画像データの左上隅にある画素の画像データは階調値１８０であり、ディザマトリックス上でこの画素に対応する位置に記憶されている閾値は１である。従って、左上隅の画素については、画像データの階調値１８０の方がディザマトリックスの閾値１よりも大きいから、この画素にはドットを形成すると判断する。図２８中に実線で示した矢印は、この画素にはドットを形成すると判断して、判断結果をメモリに書き込んでいる様子を模式的に表したものである。一方、この画素の右隣の画素については、画像データの階調値は１３０、ディザマトリックスの閾値は１７７であり、閾値の方が大きいので、この画素についてはドットを形成しないものと判断する。ディザ法では、このようにディザマトリックスを参照しながらドットを発生させる。図２５に示した印刷処理のステップＳ３０６では、色変換処理によって変換されたＣ，Ｍ，Ｙ，Ｋ各色の階調値毎に、以上のようにしてドット形成の有無を判断する処理を行う。
【０１２５】
以上のようにしてハーフトーン処理を終了すると、カラープリンタ２００のＣＰＵは、インターレース処理を開始する（ステップＳ３０８）。インターレース処理とは、ドットの形成有無による表現形式に変換された画像データを、カラープリンタ２００が実際に印刷用紙上にドットを形成する順番を考慮して並べ替える処理である。
【０１２６】
こうしてインターレース処理を行ったら、得られたデータに従って、印刷用紙上にドットを形成することにより画像を印刷する。すなわち、図２を用いて前述したように、キャリッジモータ２３０および紙送りモータ２３５を駆動することによってキャリッジ２４０の主走査および副走査を行い、これらの動きに合わせて印字ヘッド２４１を駆動してインク滴を吐出することによりインクドットを形成する。その結果、モニタ１５０の画面に表示されているものと、同じ場面の印刷画像が得られることになる。
【０１２７】
以上に説明したように、本実施例のゲーム機１００では、モニタ１５０に表示された画面を印刷するに際して、画面の表示用に用いられる粗いポリゴンのポリゴンデータ（表示用ポリゴンデータ）を、印刷用に用いられる細かなポリゴンによるポリゴンデータ（印刷用ポリゴンデータ）に差し替えることによって精密ポリゴンデータを生成する。そして、この精密ポリゴンデータに基づいて印刷データを生成することにより画像を印刷している。このため、印刷された画像では、オブジェクトは小さなポリゴンによって形成されることになるので、表面がゴツゴツすることがなく、あたかも実在する対象を写真で撮影したかのような画像が得られることになる。
【０１２８】
もちろん、印刷用ポリゴンデータは細かなポリゴンによって構成されているので、表示用ポリゴンデータよりはポリゴン数が多く、従って、表示用ポリゴンデータを印刷用ポリゴンデータに差し換えると、１枚の画像を構成するポリゴン数は増加する。そして、ポリゴン数が多くなると、ゲーム機１００に搭載しているメモリ容量の制約から、全てのポリゴンのデータに対して一度に描画処理を実行することが困難となる。特に、用紙サイズがＡ３以上の、いわゆる大判印刷を行う場合には、画質を維持するためにより細かなポリゴンが使用されることが多く、それだけポリゴン数も増加するので、こうした傾向が顕著となる。しかし、本実施例のゲーム機１００では、所定のポリゴン数ずつポリゴンデータを読み出して描画処理を実行し、その度に、フレームバッファ１１４上に展開された画像データを印刷データとしてカラープリンタ２００に供給することが可能である。このため、たとえ大判印刷を行うような場合でも、搭載しているメモリ容量の制約を受けることなく、画像を印刷することが可能となるのである。
【０１２９】
上述した第１実施例のゲーム機１００には、種々の変形例が存在している。以下では、これら変形例について簡単に説明する。
【０１３０】
Ｃ−４．第１の変形例  ：
上述した実施例では、印刷データ出力処理において、精密ポリゴンデータを所定ポリゴン数ずつ読み込んで描画処理を実行し、得られた画像データを印刷データとして出力するものとして説明した。こうすれば、たとえフレームバッファ１１４のメモリ容量が十分ではない場合でも、メモリ容量の範囲内で描画処理を実行して印刷データを出力することが可能である。しかし、読み込むポリゴン数を所定数に固定してしまうのではなく、フレームバッファ１１４に展開したデータ量が所定量に達するまで、ポリゴンを読み込んで描画処理を行うこととしても良い。
【０１３１】
図２９は、このような第１の変形例の印刷データ出力処理の流れを示すフローチャートである。かかる処理は、図２０を用いて前述した第１実施例の印刷データ出力処理に対して、フレームバッファ１１４に展開したデータ量が許容値に達するまで、ポリゴン１つ分ずつポリゴンデータを読み込んで描画処理を行う点が大きく異なっている。以下、かかる相違点を中心に、第１の変形例の印刷データ出力処理について説明する。
【０１３２】
第１の変形例の印刷データ出力処理を開始すると、先ず初めに、メインメモリ１１０から精密ポリゴンデータを読み込む処理を行う（ステップＳ２５０）。前述した第１実施例の印刷データ出力処理では、ポリゴンデータを所定ポリゴン数ずつ読み込んでいたが、第１の変形例では、ポリゴン１つ分だけポリゴンデータを読み込む。
【０１３３】
次いで、読み込んだポリゴンデータに対して描画処理を行う（ステップＳ２５２）。その結果、フレームバッファ１１４上には、読み込んだポリゴン１つ分の画像データが展開されることになる。
【０１３４】
こうしてポリゴンデータを展開したら、フレームバッファ１１４上に展開されているデータが、所定の許容値に達したか否かを判断する（ステップＳ２５４）。許容値は、フレームバッファ１１４のメモリ容量に対して、ある程度の余裕を持たせた値（例えば、メモリ容量の９割程度の値）に設定されている。そして、展開されている画像データがメモリの許容値に達していなければ（ステップＳ２５４：ｎｏ）、新たなポリゴンのデータを展開可能と判断して、精密ポリゴンデータからもう１つ分のポリゴンのデータを読み込み（ステップＳ２５０）、読み込んだデータに対して描画処理を行って画像データを展開した後（ステップＳ２５２）、展開したデータがメモリの許容値に達したか否かを判断する（ステップＳ２５４）。こうした操作を繰り返し、フレームバッファ１１４上に展開したデータが許容値に達したと判断されたら（ステップＳ２５４：ｙｅｓ）、展開した画像データをラスタ単位で読み出して、印刷データとして出力する（ステップＳ２５６）。かかる処理は、図２０および図２２を用いて前述した第１実施例の印刷データ出力処理と同様であるため、ここでは説明を省略する。
【０１３５】
以上のようにして、ラスタ単位の画像データを印刷データとして出力したら、レンダリング処理が施された精密ポリゴンデータの全ポリゴンについて、処理が終了したか否かを判断する（ステップＳ２５８）。そして、未だ処理していないポリゴンが残っている場合は（ステップＳ２５８：ｎｏ）、ステップＳ２５０に戻って、メインメモリ１１０上に記憶されている精密ポリゴンデータから、新たにポリゴン１つ分のデータを読み出した後、上述した一連の処理を繰り返す。そして、最終的に、全ポリゴンについての処理を終了したと判断されたら（ステップＳ２５８：ｙｅｓ）、図２９に示した第１の変形例の印刷データ出力処理を終了して、図１５に示した画像印刷処理に復帰する。
【０１３６】
以上に説明した第１の変形例の印刷データ出力処理では、読み込んだポリゴンの大きさに拘わらず、常にフレームバッファ１１４のメモリ容量を効率よく使用して印刷データを出力することが可能となる。このため、印刷データ出力処理を迅速に行うことができ、延いては、画像を迅速に印刷することが可能となる。
【０１３７】
Ｃ−５．第２の変形例  ：
以上に説明した第１実施例の印刷データ出力処理では、フレームバッファ１１４上に画像データを展開すると、出力可能なラスタを検出して印刷データとして出力した。そして、次回の処理では、フレームバッファ１１４上に新たに展開した画像データの中から、新たなラスタを検出して印刷データとして出力した。従って、フレームバッファ１１４上に新たな画像データを展開する度に、重複することなく新たな印刷データが順番に出力されることになる。これに対して、フレームバッファ１１４上に毎回、画像データを展開して印刷データを出力する度に、前回に展開して出力した印刷データの一部を重ねて出力することとしても良い。
【０１３８】
図３０は、こうした第２の変形例の印刷データ出力処理において、印刷データをオーバーラップさせて出力する様子を概念的に示した説明図である。図中にハッチングを付した領域は、フレームバッファ１１４上に画像データが展開されている領域を示している。図３０では、粗いハッチングから細かいハッチングまで種々のハッチングが付された領域が存在するが、これら全ての領域が画像データの展開された領域となっている。
【０１３９】
印刷データを出力するに際しては、このような領域の中からラスタ単位で画像データを読み出して、印刷データとして出力する。図中に細かいハッチングを付した領域、および中間のハッチングを付した領域では、ラスタ単位で画像データを読み出すことが可能であり、これらの領域の画像データが印刷データとして出力される。
【０１４０】
ここで、第２の変形例の印刷データ出力処理では、印刷データとして出力した領域の後半部分（図３０では、細かいハッチングを付した示した領域）については、印刷データの出力後もデータを破棄することなく記憶しておく。そして、次回にポリゴンのデータを読み込んでフレームバッファ１１４上に展開し、新たな印刷データを出力するに先立って、記憶しておいた印刷データをカラープリンタ２００に出力してから、新たな印刷データを出力する。結局、この部分については２回、印刷データを出力することになる。
【０１４１】
このように、毎回読み込まれて展開される画像データの繋ぎ目部分では、印刷データを重複してカラープリンタ２００に出力してやれば、印刷データを分割した状態で受け取っても、繋ぎ目部分で印刷画質が悪化することを回避することが可能となる。
【０１４２】
Ｄ．第２実施例  ：
以上に説明した第１実施例の画像印刷処理では、細かなポリゴンによって構成された印刷用ポリゴンデータを予め記憶しておき、画像の印刷に際しては、表示用ポリゴンデータを印刷用ポリゴンデータに置き換えて精密ポリゴンデータを生成した後、得られた精密ポリゴンデータを含む各オブジェクトに対して、レンダリング処理や描画処理などの一連の処理を行って画像を印刷した。もっとも、印刷用ポリゴンデータを予め用意しておくのではなく、表示用ポリゴンデータから印刷用ポリゴンデータを生成し、このデータに対して、レンダリング処理を始めとする一連の処理を行うこととしても良い。以下では、このような第２実施例の画像印刷処理について説明する。
【０１４３】
図３１は、第２実施例の画像印刷処理の流れを示すフローチャートである。かかる処理は、前述した第１実施例の画像印刷処理に対して、表示用ポリゴンデータから、細かなポリゴンによって構成された印刷用ポリゴンデータを生成している点が大きく異なっており、他の部分の処理は、第１実施例の処理とほぼ同様である。以下では、こうした相違点を中心として、第２実施例の画像印刷処理について説明する。
【０１４４】
第２実施例の画像印刷処理においても、前述した第１実施例と同様に、ゲーム機１００のＣＰＵ１０１は、コントローラ１０２に設けられた所定の印刷ボタンが押されたことを検出すると、割り込みを発生させて画像印刷処理を開始する。そして、先ず初めに、コントローラ１０２の印刷ボタンが押された時点でモニタ１５０に表示されていた画像の、元となったポリゴンデータ（表示用ポリゴンデータ）を取得する（ステップＳ４００）。
【０１４５】
次いで、画像の撮影条件および印刷条件を設定する（ステップＳ４０２、ステップＳ４０４）。撮影条件は、モニタ１５０に表示された画面（図１６参照）を見ながら、焦点距離、焦点位置、絞りなどについて設定する。また、印刷条件は、モニタ１５０に表示された画面（図１７参照）を見ながら、用紙サイズ、用紙種類、印刷モードなどについて設定する。
【０１４６】
続いて、モニタ１５０に表示された各オブジェクトについて、オブジェクトを構成するポリゴンを分割するか否かを決定する（ステップＳ４０６）。ポリゴンを分割するか否かは、印刷条件設定処理で設定された「用紙サイズ」および「印刷モード」の組合せに応じて決定する。例えば、印刷モードが「速い」に設定されており、用紙サイズが「写真普通版」あるいは「写真Ｌ版」の場合は、ポリゴンの分割は行わない。これは、印刷モードが「速い」に設定されており、いわゆる大判印刷も行わない場合は、印刷画質もさほど高くはなく、印刷画像も小さいので、表示用ポリゴンデータのまま（すなわち粗いポリゴンのまま）画像を印刷しても、ポリゴンが目立つことはないからである。これに対して、印刷モードが「きれい」に設定されていたり、印刷用紙がＡ４サイズ以上のいわゆる大判印刷が行われる場合は、ポリゴンが目立って画質を悪化させることの無いように、ポリゴンを分割するものと判断する。
【０１４７】
次いで、分割するものと決定されたポリゴンについては、ポリゴンを分割することにより、表示用ポリゴンデータから印刷用ポリゴンデータを生成する処理を行う（ステップＳ４０８）。
【０１４８】
図３２は、ポリゴンを分割している様子を概念的に示した説明図である。図中に太い実線で示した３つの三角形は、分割する前のポリゴンを表している。これらポリゴンを分割する場合には、ポリゴンを構成する各辺の中点を結ぶことにより、それぞれのポリゴンを４つの小さなポリゴンに分割する。図３２に示した三角形ＡＢＣのポリゴンについて説明すると、辺ＡＢの中点ａｂと、辺ＢＣの中点ｂｃと、辺ＡＣの中点ａｃとをそれぞれ結ぶことにより、三角形ＡＢＣをより小さな４つの三角形に分割することができる。隣接するポリゴンＢＣＤについても同様にして、辺ＢＣの中点ｂｃと、辺ＣＤの中点ｃｄと、辺ＢＤの中点ｂｄとをそれぞれ結べば、三角形ＢＣＤを４つの三角形に分割することができる。レベル２の分割では、オブジェクトを構成する全てのポリゴンについて、このような操作を繰り返すことにより、それぞれのポリゴンを４つの小さなポリゴンに分割する。第２実施例の画像印刷処理におけるステップＳ４０８では、分割すると決定したポリゴンを、このように４つのポリゴンに分割する処理を行う。
【０１４９】
また、このようにして分割して生成された小さなポリゴンのテクスチャ番号は、元になったポリゴンのテクスチャ番号と、隣接するポリゴンのテクスチャ番号とに基づいて決定する。例えば、図３２に示した三角形ＢＣＤのポリゴンを用いて説明する。中央に生成された小さなポリゴンｃ１については、元になったポリゴンのテクスチャ番号をそのまま付与しておく。一方、隣接する２つのポリゴン（三角形ＡＢＣ、三角形ＣＤＥ）に挟まれた小さなポリゴンｃ２については、隣接する２つのポリゴンのテクスチャと、元になったポリゴン（三角形ＢＣＤ）のテクスチャとの中間的なテクスチャとなるテクスチャ番号を設定する。同様に、分割して生成した小さなポリゴンｃ３については、隣接するポリゴン（三角形ＡＢＣ）と、元になったポリゴン（三角形ＢＣＤ）との中間的なテクスチャとなるテクスチャ番号を設定してやればよい。以上のようにして、ポリゴンを小さなポリゴンに分割し、分割して生成したポリゴンの頂点を検出するとともに、各ポリゴンのテクスチャ番号を設定してやれば、通常のポリゴンデータから、ポリゴンがより小さなポリゴンに分割されたポリゴンデータを生成することができる。
【０１５０】
尚、ここでは、ポリゴンの分割方法は図３２に示したように、１つのポリゴンを４分割する方法のみについて説明したが、ポリゴンをより多くのポリゴンに分割したり、あるいはより少ないポリゴンに分割することとしても良い。
【０１５１】
図３３は、ポリゴンの異なる分割方法を例示した説明図である。図３２に示した場合と同様に、図中に太い実線で示した３つの三角形は、分割する前のポリゴンを表している。図３３に示した分割方法では、ポリゴンの頂点と、その頂点に対抗する辺（対辺）の中点を結ぶことにより、１つのポリゴンを６つの小さなポリゴンに分割する。図３３に示した三角形ＡＢＣのポリゴンについて説明すると、頂点Ａと、これに対する対辺ＢＣの中点ｂｃとを結び、頂点Ｂと対辺ＡＣの中点ａｃとを結び、頂点Ｃと対辺ＡＢの中点ａｂとを結ぶことにより、三角形ＡＢＣを分割する。頂点と対辺の中点とを結ぶ直線は三角形の重心で交わることから、このようにして三角形のポリゴンを分割すれば、６つの小さなポリゴンに分割することができる。印刷用紙のサイズが大きい場合など、印刷条件に応じて、適切な方法を選択してポリゴンを分割することとしてもよい。
【０１５２】
以上のようにしてポリゴンを分割すると、表示用ポリゴンデータが印刷用ポリゴンデータに変換され、その結果、精密ポリゴンデータが得られることになる。こうして精密ポリゴンデータを生成したら、以降は、前述した第１実施例の画像印刷処理と同様にして画像を印刷する。以下、簡単に説明する。
【０１５３】
先ず、生成した精密ポリゴンデータに対してレンダリング処理を行う（ステップＳ４１０）。図１１を用いて前述したように、レンダリング処理とは、各オブジェクトのポリゴンデータから二次元画像のデータを生成する処理である。レンダリング処理によって得られる二次元画像のデータは、ポリゴンを構成する頂点を、投影面上に投影して得られる頂点の二次元座標と、投影されたポリゴンに付与すべきテクスチャ番号とによって表現されており、メインメモリ１１０には、このような形式のデータが記憶される。
【０１５４】
レンダリング処理に続いて、印刷データ出力処理を行うことにより、フレームバッファ１１４上に展開した画像データをラスタ単位で読み出して、印刷データとしてカラープリンタ２００に出力する（ステップＳ２００）。かかる処理は、前述した第１実施例における印刷データ出力処理と全く同様であるため、ここでは説明を省略する。
【０１５５】
第２実施例の画像印刷処理においても、印刷データ出力処理から復帰すると、ゲーム復帰処理を行う（ステップＳ４１２）。すなわち、第２実施例の画像印刷処理も、進行中のゲームを一旦、中断させて開始されるので、画像印刷処理を終了させる前に、プログラムカウンタや各種データをゲームの中断前の状態に復帰させて、ゲームを再開するための準備を行うのである。そして、ゲーム復帰処理を終了したら、図３１に示した第２実施例の画像印刷処理を終了する。
【０１５６】
以上に説明した第２実施例の画像印刷処理では、モニタ１５０に表示された画像を印刷するに際して、オブジェクトを構成するポリゴンを、印刷条件に応じて細かなポリゴンに分割して精密ポリゴンデータを生成する。そして、得られた精密ポリゴンデータに基づいて画像を印刷しているために、ポリゴンが目立ち難い高画質な画像を印刷することができる。もちろん、ポリゴンを細かなポリゴンに分割するだけでは、オブジェクト形状の表現精度が向上するわけではないが、このようにして細かなポリゴンに分割しておけば、各ポリゴンに適切なテクスチャを付与することで、オブジェクト表面がゴツゴツした印象を大幅に緩和することができる。このため、カラープリンタ２００から画像を出力した場合でも、実在する対象を写真で撮影したかのような印刷画像を得ることが可能となる。
【０１５７】
また、かかる第２実施例の画像印刷処理では、取得したポリゴンデータから、各ポリゴンを分割することによって印刷用ポリゴンデータを生成するため、前述した第１実施例の画像印刷処理のように、取得したポリゴンデータと印刷用ポリゴンデータとを、基準点を用いて位置合わせする処理が不要となり、メモリ容量や処理能力が比較的小さなゲーム機１００を用いた場合でも、迅速に画像を印刷することが可能となる。
【０１５８】
ポリゴンを細かなポリゴンに分割すれば、全体のポリゴン数が増加するため、全ポリゴンのデータをフレームバッファ１１４上に一度に展開することが困難となるが、上述した第２実施例の印刷データ出力処理においても、所定のポリゴン数ずつ（あるいは展開した画像データが所定になるポリゴン数ずつ）ポリゴンデータを読み出して描画処理を実行する。そして、フレームバッファ１１４上に展開された画像データを、順次、印刷データとしてカラープリンタ２００に供給する。このため、たとえ大判印刷を行うような場合でも、搭載しているメモリ容量の制約を受けることなく、画像を印刷することが可能となる。
【０１５９】
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。
【０１６０】
例えば、上述した各種の実施例では、モニタ１５０に表示された画面を印刷する場合、画像を印刷するための細かなポリゴンに基づく画像データを生成すると、この画像データは印刷データを生成するためだけに用いられるものとして説明した。しかし、生成した画像データを用いてモニタ１５０に画像を表示することとしても良い。例えば、印刷データの生成を開始するとともに、細かなポリゴンに基づいて生成された画像データを、モニタ１５０の画面に表示することとしても良い。印刷のために生成された画像データは、モニタ１５０に表示するために生成された画像データよりも高画質な画像を表示可能であり、加えて、撮影条件などを考慮して各種の処理が施された画像データとなっている。従って、印刷データの生成中に、この細かなポリゴンに基づく画像データをモニタ１５０に表示してやれば、こうした効果をモニタ１５０の上でも確認することが可能となる。
【０１６１】
あるいは、印刷データの生成を開始する前に、細かなポリゴンに基づく画像データをモニタ１５０の画面上に表示することとしても良い。こうすれば、撮影条件などの各種の設定項目を、細かなポリゴンに基づく画像データによって、効果を確認しながら設定することができるので、より適切な設定を行うことが可能となる。
【図面の簡単な説明】
【０１６２】
【図１】本実施例の画像データ生成装置を備えたゲーム機の構成を示す説明図である。
【図２】本実施例のゲーム機に接続されているカラープリンタの概略構成を示す説明図である。
【図３】インク吐出用ヘッドのインクジェットノズルの配列を示す説明図である。
【図４】ゲーム中の画面がモニタに表示されている様子を例示した説明図である。
【図５】モニタの画面上で二次元画像が嵌め込まれて表示されている領域を示した説明図である。
【図６】メインキャラクタである飛行艇の形状を示す斜視図である。
【図７】メインキャラクタの飛行艇の形状がポリゴンによって表現されている様子を概念的に示した説明図である。
【図８】オブジェクトのポリゴンデータを管理するために用いられるオブジェクトテーブルを概念的に示した説明図である。
【図９】ポリゴンデータのデータ構造を示す説明図である。
【図１０】ゲーム中の画面をモニタに表示する処理の概要を示したフローチャートである。
【図１１】レンダリング処理の概要を示した説明図である。
【図１２】オブジェクトを構成するポリゴンの頂点座標を、二次元平面の座標点に投影する変換式を例示した説明図である。
【図１３】レンダリング処理によって生成された投影像を概念的に示した説明図である。
【図１４】ＣＰＵがＧＰＵに出力する描画命令のデータ構造を概念的に示した説明図である。
【図１５】第１実施例のゲーム機によって行われる画像印刷処理の流れを示すフローチャートである。
【図１６】画像の撮影条件を設定するための画面を例示した説明図である。
【図１７】画像の印刷条件を設定するための画面を例示した説明図である。
【図１８】メインキャラクタである飛行艇の三次元的な形状が小さなポリゴンを用いて表現されている様子を概念的に表した説明図である。
【図１９】印刷用ポリゴンデータの有無を判断するために参照されるテーブルを概念的に示した説明図である。
【図２０】印刷データ出力処理の流れを示すフローチャートである。
【図２１】精密ポリゴンデータから所定数のポリゴンのデータを読み出す様子を示す説明図である。
【図２２】フレームバッファ上の画像データをラスタ単位で出力する様子を示す説明図である。
【図２３】メインメモリから新たなポリゴンのデータが読み出された様子を示す説明図である。
【図２４】メインメモリから更に新たなポリゴンのデータが読み出された様子を示す説明図である。
【図２５】カラープリンタが画像を印刷するために行う印刷処理の流れを示すフローチャートである。
【図２６】色変換処理のために参照されるＬＵＴを概念的に示した説明図である。
【図２７】ディザ法で参照される一般的なディザマトリックスの一部を拡大して例示した説明図である。
【図２８】ディザマトリックスを参照しながら画素毎にドット形成の有無を判断している様子を概念的に示した説明図である。
【図２９】第１の変形例の印刷データ出力処理の流れを示すフローチャートである。
【図３０】第２の変形例の印刷データ出力処理において印刷データをオーバーラップさせて出力する様子を概念的に示した説明図である。
【図３１】第２実施例の画像印刷処理の流れを示すフローチャートである。
【図３２】ポリゴンを分割している様子を概念的に示した説明図である。
【図３３】ポリゴンの異なる分割方法を例示した説明図である。
【符号の説明】
【０１６３】
１００…ゲーム機、    １０１…ＣＰＵ、    １１０…メインメモリ、
１１２…ＧＴＥ、    １１４…フレームバッファ、    １１６…ＧＰＵ、
１５０…モニタ、    ２００…カラープリンタ、    ５００…ゲーム機
【図１】
2006228088.tif 000003
【図２】
2006228088.tif 000004
【図３】
2006228088.tif 000005
【図４】
2006228088.tif 000006
【図５】
2006228088.tif 000007
【図６】
2006228088.tif 000008
【図７】
2006228088.tif 000009
【図８】
2006228088.tif 000010
【図９】
2006228088.tif 000011
【図１０】
2006228088.tif 000012
【図１１】
2006228088.tif 000013
【図１２】
2006228088.tif 000014
【図１３】
2006228088.tif 000015
【図１４】
2006228088.tif 000016
【図１５】
2006228088.tif 000017
【図１６】
2006228088.tif 000018
【図１７】
2006228088.tif 000019
【図１８】
2006228088.tif 000020
【図１９】
2006228088.tif 000021
【図２０】
2006228088.tif 000022
【図２１】
2006228088.tif 000023
【図２２】
2006228088.tif 000024
【図２３】
2006228088.tif 000025
【図２４】
2006228088.tif 000026
【図２５】
2006228088.tif 000027
【図２６】
2006228088.tif 000028
【図２７】
2006228088.tif 000029
【図２８】
2006228088.tif 000030
【図２９】
2006228088.tif 000031
【図３０】
2006228088.tif 000032
【図３１】
2006228088.tif 000033
【図３２】
2006228088.tif 000034
【図３３】
2006228088.tif 000035