(57)【特許請求の範囲】
【請求項１】
三次元空間に存在する操作オブジェクトおよび他のオブジェクトを所定の撮影位置から撮影した映像をディスプレイに表示する画像処理装置であって、
前記操作オブジェクトおよび前記他のオブジェクトのデータおよび所定のプログラムを記憶している外部記憶手段、
前記操作オブジェクトの前記三次元空間での位置を変化させるデータを入力するための入力手段、
前記入力手段によって入力されたデータに基づいて前記三次元空間での前記操作オブジェクトの位置を変化させるように操作オブジェクト位置データを発生する操作オブジェクト位置データ発生手段、
前記外部記憶手段に記憶されているデータと前記操作オブジェクト位置データとに基づいて三次元データを作成する三次元データ作成手段、
前記操作オブジェクトを撮影するための前記三次元空間での撮影位置を示す撮影位置データを発生する撮影位置データ発生手段、
前記撮影位置と前記操作オブジェクト位置との間に前記他のオブジェクトを形成するポリゴンが存在するか否かを検出する遮蔽ポリゴン検出手段、
前記遮蔽ポリゴン検出手段によって検出されたポリゴンが、前記撮影位置に対して表向きであるか裏向きであるかを検出する、表裏判定手段、
目標物を原点として、前記表裏判定手段によって裏向きであると判定されたポリゴンの法線のみに垂直な角度を形成するように、撮影位置を回転移動する、撮影位置データ回転変更手段、
前記三次元データおよび前記撮影位置データに基づいて前記三次元空間の所定の撮影位置から前記操作オブジェクトを撮影した映像をディスプレイに表示するための表示データを作成する表示データ作成手段、および
前記表示データ作成手段によって作成された表示データに基づいてディスプレイに画像信号を出力する画像信号発生手段を備える、三次元画像処理装置。
【請求項２】
前記遮蔽ポリゴン検出手段は、前記撮影位置と、前記操作オブジェクト位置とを結ぶ直線上における、任意の点において検出を行うものであって、前記任意の点から所定距離の中にポリゴンが存在するときに、該ポリゴンを遮蔽ポリゴンとして検出する、請求項１記載の三次元画像処理装置。
【請求項３】
前記遮蔽ポリゴン検出手段は、遮蔽ポリゴン選別手段をさらに含み、
前記遮蔽ポリゴン選別手段は、前記任意の点から所定距離内にポリゴンが存在したときに、前記任意の点から該ポリゴンに垂直に下ろされた直線との接点が、該ポリゴンに含まれるかどうかを判定し、
前記遮蔽ポリゴン検出手段は、前記遮蔽ポリゴン選別手段によって、該ポリゴンに含まれると判断されたポリゴンを遮蔽ポリゴンとして検出する、請求項２記載の三次元画像処理装置。
【請求項４】
操作オブジェクトおよび他のオブジェクトのデータおよび所定のプログラムを記憶している外部記憶手段を備えた画像処理装置を用いて、三次元空間に存在する操作オブジェクトおよび他のオブジェクトを所定の撮影位置から撮影した映像をディスプレイに表示する画像処理方法であって、
入力手段を介して、前記操作オブジェクトの前記三次元空間での位置を変化させるデータが入力されるステップ、
操作オブジェクト位置データ発生手段が、前記入力手段によって入力されたデータに基づいて前記三次元空間での前記操作オブジェクトの位置を変化させるように操作オブジェクト位置データを発生するステップ、
三次元データ作成手段が、前記外部記憶手段に記憶されているデータと前記操作オブジェクト位置データとに基づいて三次元データを作成するステップ、
撮影位置データ発生手段が、前記操作オブジェクトを撮影するための前記三次元空間での撮影位置を示す撮影位置データを発生するステップ、
遮蔽ポリゴン検出手段が、前記撮影位置と前記操作オブジェクト位置との間に前記他のオブジェクトを形成するポリゴンが存在するか否かを検出するステップ、
表裏判定手段が、前記遮蔽ポリゴン検出手段によって検出されたポリゴンが、前記撮影位置に対して表向きであるか裏向きであるかを検出するステップ、
撮影位置データ回転変更手段が、目標物を原点として、前記表裏判定手段によって裏向きであると判定されたポリゴンの法線のみに垂直な角度を形成するように、撮影位置を回転移動するステップ、
表示データ作成手段が、前記三次元データおよび前記撮影位置データに基づいて前記三次元空間の所定の撮影位置から前記操作オブジェクトを撮影した映像をディスプレイに表示するための表示データを作成するステップ、および
画像信号発生手段が、前記表示データ作成手段によって作成された表示データに基づいてディスプレイに画像信号を出力するステップから構成される、三次元画像処理方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明は三次元画像処理装置およびそれに用いる外部記憶装置に関し、特にたとえば三次元空間に存在する操作オブジェクトや他のオブジェクトを所定の撮影位置（視点）から撮影した映像をディスプレイに表示する三次元画像処理装置、およびそれに用いる外部記憶装置に関する。
【０００２】
【従来の技術】
従来のいわゆる３Ｄ（３−Ｄｉｍｅｎｓｉｏｎａｌ）  ゲームにおいては、三次元データで構成された操作オブジェクト（操作者によって操作され得るオブジェクト）を所定の方向および距離からカメラで撮影した映像をに表示していた。
【０００３】
【発明が解決しようとする課題】
従来の３Ｄゲームでは、操作オブジェクトとカメラとの間に背景画像または敵キャラクタとして使用されているオブジェクト（他のオブジェクト）が存在するとき、または、他のオブジェクトが移動して操作オブジェクトとカメラの間に割り込んできたとき、操作オブジェクトを撮影できなかった。
【０００４】
したがって、このような従来の３Ｄゲームでは、プログラムによって、操作オブジェクトとカメラとの間に他のオブジェクトが存在しないように他のオブジェクトの配置を制限しなければならなかった。
それゆえに、この発明の主たる目的は、常に操作オブジェクトを表示することができ、したがって、他のオブジェクトの配置を制限することがない、画像処理装置を提供することである。
【０００５】
【課題を解決するための手段】
第１の発明は、三次元空間に存在する操作オブジェクトおよび他のオブジェクトを所定の撮影位置から撮影した映像をディスプレイに表示する画像処理装置であって、操作オブジェクトおよび他のオブジェクトのデータおよび所定のプログラムを記憶している外部記憶手段、操作オブジェクトの三次元空間での位置を変化させるデータを入力するための入力手段、入力手段によって入力されたデータに基づいて三次元空間での操作オブジェクトの位置を変化させるように操作オブジェクト位置データを発生する操作オブジェクト位置データ発生手段、外部記憶手段に記憶されているデータと操作オブジェクト位置データとに基づいて三次元データを作成する三次元データ作成手段、操作オブジェクトを撮影するための三次元空間での撮影位置を示す撮影位置データを発生する撮影位置データ発生手段、撮影位置と操作オブジェクト位置との間に他のオブジェクトを形成するポリゴンが存在するか否かを検出する遮蔽ポリゴン検出手段、遮蔽ポリゴン検出手段によって検出されたポリゴンが、撮影位置に対して表向きであるか裏向きであるかを検出する、表裏判定手段、目標物を原点として、表裏判定手段によって裏向きであると判定されたポリゴンの法線のみに垂直な角度を形成するように、撮影位置を回転移動する、撮影位置データ回転変更手段、三次元データおよび撮影位置データに基づいて三次元空間の所定の撮影位置から操作オブジェクトを撮影した映像をディスプレイに表示するための表示データを作成する表示データ作成手段、および表示データ作成手段によって作成された表示データに基づいてディスプレイに画像信号を出力する画像信号発生手段を備える、三次元画像処理装置である。
第２の発明は、操作オブジェクトおよび他のオブジェクトのデータおよび所定のプログラムを記憶している外部記憶手段を備えた画像処理装置を用いて、三次元空間に存在する操作オブジェクトおよび他のオブジェクトを所定の撮影位置から撮影した映像をディスプレイに表示する画像処理方法であって、入力手段を介して、操作オブジェクトの三次元空間での位置を変化させるデータが入力されるステップ、操作オブジェクト位置データ発生手段が、入力手段によって入力されたデータに基づいて三次元空間での操作オブジェクトの位置を変化させるように操作オブジェクト位置データを発生するステップ、三次元データ作成手段が、外部記憶手段に記憶されているデータと操作オブジェクト位置データとに基づいて三次元データを作成するステップ、撮影位置データ発生手段が、操作オブジェクトを撮影するための三次元空間での撮影位置を示す撮影位置データを発生するステップ、遮蔽ポリゴン検出手段が、撮影位置と操作オブジェクト位置との間に他のオブジェクトを形成するポリゴンが存在するか否かを検出するステップ、表裏判定手段が、遮蔽ポリゴン検出手段によって検出されたポリゴンが、撮影位置に対して表向きであるか裏向きであるかを検出するステップ、撮影位置データ回転変更手段が、目標物を原点として、表裏判定手段によって裏向きであると判定されたポリゴンの法線のみに垂直な角度を形成するように、撮影位置を回転移動するステップ、表示データ作成手段が、三次元データおよび撮影位置データに基づいて三次元空間の所定の撮影位置から操作オブジェクトを撮影した映像をディスプレイに表示するための表示データを作成するステップ、および画像信号発生手段が、表示データ作成手段によって作成された表示データに基づいてディスプレイに画像信号を出力するステップから構成される、三次元画像処理方法である。
【０００６】
【作用】
遮蔽ポリゴン検出手段が、撮影位置と操作オブジェクト位置との間に他のオブジェクトを形成するポリゴンが存在するか否かを検出する。他のオブジェクトのポリゴンの存在が検出されると、表裏判定手段が、そのポリゴンが、撮影位置に対して表向きであるか裏向きであるかを検出する。撮影位置と操作オブジェクト位置との間に存在する他のオブジェクトのポリゴンが裏向きであれば、撮影位置データ回転変更手段が、目標物を原点として、表裏判定手段によって裏向きであると判定されたポリゴンの法線のみに垂直な角度を形成するように、撮影位置を回転移動する。したがって、操作オブジェクトが他のオブジェクトに邪魔されずにカメラによって写される。
【０００７】
【発明の効果】
この発明によれば、他のオブジェクトを自由に配置していても、操作オブジェクトを常にディスプレイ画面に表示させることが可能である。したがって、この発明がゲーム装置に適用された場合には、操作オブジェクトや多数の他のオブジェクトがディスプレイ画面中を移動するようなゲームにおいても、常に操作オブジェクトをディスプレイ上に表示することができる。
【０００８】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【０００９】
【実施例】
図１はこの発明の一実施例の画像処理システムのシステム構成を示す外観図である。画像処理システムは、たとえばビデオゲームシステムであって、画像処理装置本体１０と、外部記憶装置の一例のＲＯＭカートリッジ２０と、画像処理装置本体１０に接続される表示手段の一例のディスプレイ３０と、操作手段の一例のコントローラ４０と、コントローラ４０に着脱自在に装着される拡張装置の一例のＲＡＭカートリッジ５０とを含んで構成される。なお、外部記憶装置は、ゲーム等の画像処理のための画像データやプログラムデータを記憶するとともに、必要に応じて音楽や効果音等の音声データを記憶するものであり、ＲＯＭカートリッジに代えてＣＤ−ＲＯＭや磁気ディスクを用いてもよい。操作手段は、この実施例の画像処理システムがパーソナルコンピュータに適用される場合には、キーボードやマウス等の入力装置が用いられる。
【００１０】
図２はこの実施例の画像処理システムのブロック図である。画像処理装置１０には、中央処理ユニット（以下「ＣＰＵ」）１１およびバス制御回路１２が内蔵される。バス制御回路１２には、ＲＯＭカートリッジ２０を着脱自在に装着するためのカートリッジ用コネクタ１３が接続されるととともに、ワーキングＲＡＭ１４が接続される。また、バス制御回路１４には、ＣＰＵ１１によって処理された音声信号を出力するための音声信号発生回路１５および画像信号を出力するための画像信号発生回路１６が接続され、さらに１つまたは複数のコントローラ４０の操作データおよび／またはＲＡＭカートリッジ５０のデータをシリアルで転送するためのコントローラ制御回路１７が接続される。コントローラ制御回路１７には、画像処理装置１０の前面に設けられるコントローラ用コネクタ（以下「コネクタ」と略称する）１８１〜１８４が接続される。コネクタ１８には、接続用ジャック４１およびケーブル４２を介してコントローラ４０が着脱自在に接続される。このように、コネクタ１８１〜１８４にコントローラ４０を接続することにより、コントローラ４０が画像処理装置１０と電気的に接続され、相互間のデータの送受信が可能とされる。
【００１１】
より具体的には、バス制御回路１２は、ＣＰＵ１１からバスを介してパラレル信号で出力されたコマンドを入力し、パラレル−シリアル変換して、シリアル信号でコマンドをコントローラ制御回路１７に出力し、かつコントローラ制御回路１７から入力したシリアル信号のデータをパラレル信号に変換し、バスに出力する。バスから出力されたデータは、ＣＰＵ１１によって処理されたり、Ｗ−ＲＡＭ１４に記憶される等の処理が行われる。換言すれば、Ｗ−ＲＡＭ１４は、ＣＰＵ１１によって処理されるデータを一時記憶するためのメモリであって、バス制御回路１２を介してデータの読出・書込が可能とされる。
【００１２】
図３はＣＰＵ１１のメモリ空間に割り当てられた各メモリの領域を示す図解である。ＣＰＵ１１がバス制御回路１２を介してアクセスできるメモリ空間には、ＲＯＭカートリッジ２０の外部メモリ領域と、Ｗ−ＲＡＭ１４のメモリ領域がある。ＲＯＭカートリッジ２０は、ゲーム処理のためのデータを記憶したＲＯＭを基板に実装し、その基板をハウジングに収納して構成されるが、ＲＯＭ記憶データが図３に示す外部メモリ領域に示される。すなわち、ＲＯＭには、画像処理装置１０にゲームのための画像信号を発生させるために必要な画像データを記憶した画像データ領域２０１と、ＣＰＵ１１が所定の動作を行うために必要なプログラムデータを記憶したプログラムデータ領域２０２とが含まれる。プログラムデータ領域２０２には、画像データ２０１に基づいて画像表示を行うための画像表示プログラムと、計時処理を行うための計時プログラムと、カートリッジ２０と後述の拡張装置５０とが所定の関係にあることを判断するための判断プログラムとが固定的に記憶されている。なお、計時プログラムおよび判断プログラムの詳細については後述する。一方、Ｗ−ＲＡＭ１４のメモリ領域は、コントロールパッドからの操作状態を示すデータを一時記憶する領域１４１を含む。
【００１３】
図４はコントローラ制御回路１７の詳細な回路図である。コントローラ制御回路１７は、バス制御回路１２とコントローラ用コネクタ１８１〜１８４との間でデータをシリアルで送受信するために設けられ、データ転送制御回路１７１，送信回路１７２，受信回路１７３および送受信データを一時記憶するためのＲＡＭ１７４を含む。データ転送制御回路１７１は、データ転送時にデータフォーマットを変換するためにパラレル−シリアル変換回路とシリアル−パラレル変換回路とを含むとともに、ＲＡＭ１７４の書込み読出し制御を行う。シリアル−パラレル変換回路は、バス制御回路１２から供給されるシリアルデータをパラレルデータに変換してＲＡＭ１７４または送信回路１７２に与える。パラレル−シリアル変換回路は、ＲＡＭ１７４，または受信回路１７３から供給されるパラレルデータをシリアルデータに変換してバス制御回路１２に与える。送信回路１７２は、データ転送制御回路１７１から供給されるコントローラ４０の信号読込制御のためのデータおよびＲＡＭカートリッジ５０への書込データ（パラレルデータ）をシリアルデータに変換して、複数のコントローラ４０のそれぞれに対応するチャンネルＣＨ１〜ＣＨ４から送信する。受信回路１７３は、各コントローラ４０に対応するチャンネルＣＨ１〜ＣＨ４から入力される各コントローラ４０の操作状態を示すデータおよびＲＡＭカートリッジ５０からの読出データをシリアルデータで受信し、パラレルデータに変換してデータ転送制御回路１７１に与える。
【００１４】
送信回路１７２および受信回路１７３は、変調・復調（以下「変復調」という）方式の一例として、デューティーサイクル変復調方式を採用している。デューティーサイクル変復調方式は、図５に示すように、一定時間間隔で信号のＨｉの期間とＬｏの期間とを変化させることによって「１」と「０」とを表す変復調方式である。変調方式を具体的に説明すると、シリアル送信すべきデータが論理「１」のとき、１サイクル期間Ｔにおいてハイレベル期間ｔＨをローレベル期間ｔＬより長くした信号（ｔＨ＞ｔＬ）を送信し、送信すべきデータが論理「０」のとき、１サイクル期間Ｔにおいて、ｔＨをｔＬより短くした信号（ｔＨ＜ｔＬ）で送信する。
【００１５】
一方、復調方式は、受信したシリアル信号（ビット伝送信号）をサンプリングし、受信信号がハイレベルかローレベルかを常時監視しておき、受信信号のレベルがハイからローに変わるまでの時間をｔＬ、ハイからローに変わるまでの時間をｔＨとすれば、１サイクルがＴ＝ｔＬ＋ｔＨで表される。このとき、ｔＬとｔＨとの関係がｔＬ＜ｔＨであるとき論理「１」と認識し、ｔＬ＞ｔＨであるとき論理「０」と認識することにより、復調する。このようなデューティーサイクル変復調方式を使用すれば、クロックに同期させてデータを送る必要がなくなり、１本の信号線だけでデータを送受信できる利点がある。なお、２本の信号線を有する場合は、他の変復調方式を用いても良いことは勿論である。
【００１６】
ＲＡＭ１７４は、図６のメモリマップに示すように記憶領域または記憶エリア１７４ａ〜１７ｈを含む。具体的には、エリア１７４ａには１チャンネル用のコマンドが記憶され、エリア１７４ｂには１チャンネル用の送信データおよび受信データが記憶される。エリア１７４ｃには２チャンネル用のコマンドが記憶され、エリア１７４ｄには２チャンネル用の送信データおよび受信データが記憶される。エリア１７４ｅには３チャンネル用のコマンドが記憶され、エリア１７４ｆには３チャンネル用の送信データおよび受信データが記憶される。エリア１７４ｇには４チャンネル用のコマンドが記憶され、エリア１７４ｈには４チャンネル用の送信データおよび受信データが記憶される。
【００１７】
従って、データ転送制御回路１７１は、バス制御回路１２から転送されたデータまたは受信回路１７３で受信されたコントローラ４０の操作状態データやＲＡＭカートリッジ５０の読出データをＲＡＭ１７４に書込み制御したり、バス制御回路１２からの命令に基づいてＲＡＭ１７４のデータを読出してバス制御回路１２へ転送するように働く。
【００１８】
図７および図８はコントローラ４０の表面と裏面の外観斜視図である。コントローラ４０は、両手または片手で掌握可能な形状であり、そのハウジングの外部には押圧することによって電気的信号を発生する複数のボタンと、垂直に直立した操作部が突出して形成される。具体的には、コントローラ４０は、上ハウジングと下ハウジングから構成される。コントローラ４０のハウジングには、横長の平面形状を有する上面に操作部領域が形成される。コントローラ４０の操作部領域には、左側に十字型のディジタル方向スイッチ（以下「十字スイッチ」という）４０３が設けられ、右側に複数のボタンスイッチ（以下単に「スイッチ」と略称する）４０４Ａ〜４０４Ｆが設けられ、横方向の略中央部にスタートスイッチ４０５が設けられ、中央下部にアナログ入力可能なジョイスティック４５が設けられる。十字スイッチ４０３は、主人公キャラクタまたはカーソルの移動方向を指示する方向スイッチであり、上，下，左，右の押点を有し、４方向の移動を指定するのに使用される。スイッチ４０４Ａ〜４０４Ｆは、ゲームソフトによって異なるが、たとえばシューティングゲームではミサイルの発射ボタン、アクショゲームではジャンプ，キックや物を取る等の各種の動作を指示するために使用される。ジョイステック４５は、十字スイッチ４０３に代えて主人公キャラクタの移動方向の指示等に用いられるが、３６０度の全角度範囲の方向指示が可能であるので、アナログ方向指示スイッチとして利用される。
【００１９】
コントローラ４０のハウジングには、操作部領域の３か所の下方に突出するように、３本のグリップ４０２Ｌ，４０２Ｃおよび４０２Ｒが形成される。グリップ４０２Ｌ，４０２Ｃおよび４０２Ｒは、手で握ったときに掌と中指，薬指，小指とで形作られる棒状であって、付け根部分が少し細く、中央で太くなり、解放端（図７の下方側）に向かって細く形成される。コントローラ４０の下ハウジングの中央上部には、拡張装置であるＲＡＭカートリッジ５０を着脱自在に装着するための挿入口４０９が裏面より突出して形成される。ハウジングの上辺側面の左右には、プレイヤが左右の人指し指を延ばした位置に対応する位置にボタンスイッチ４０６Ｌおよびボタン４０６Ｒが設けられる。中央のグリップ４０２Ｃの付け根部分の裏面には、十字スイッチ４０３に代えてジョイスティック４５を使用するときに、スイッチ４０６Ｌに代わる機能のスイッチとしてスイッチ４０７が設けられる。
【００２０】
ハウジングの下ハーフの背面側は底面方向に延長され、その先端には開口部４０８が形成されている。開口部４０８の奥には拡張カートリッジ５０がそこに接統されるコネクタ（図示せず）が設けられている。また、開口部４０８に挿入されたカートリッジ５０を排出するためのレバー４０９が開口部４０８に形成されている。そして、上述の拡張カートリッジ５０を挿入する開口部４０８のレバー４０９の反対側には、切欠４１０が形成され、この切欠４１０はレバー４０９を用いて拡張カートリッジ５０を取り出すときに拡張カートリッジ５０を引き出すためのスペースを形成する。
【００２１】
図９はコントローラ４０および拡張装置の一例のＲＡＭカートリッジ５０の詳細な回路図である。コントローラ４０のハウジング内には、各スイッチ４０３〜４０７またはジョイスティック４５等の操作状態を検出しかつその検出データをコントローラ制御回路１７へ転送するために、操作信号処理回路４４等の電子回路が内蔵される。操作信号処理回路４４は、受信回路４４１，制御回路４４２，スイッチ信号検出回路４４３，カウンタ回路４４４，送信回路４４５，ジョイポート制御回路４４６，リセット回路４４７およびＮＯＲゲーム４４８を含む。
【００２２】
受信回路４４１は、コントローラ制御回路１７から送信される制御信号やＲＡＭカートリッジ５０への書込データ等のシリアル信号をパラレル信号に変換して制御回路４４２に与える。制御回路４４２は、コントローラ制御回路１７から送信される制御信号がジョイスティック４５のＸ，Ｙ座標のリセット信号であるとき、リセット信号を発生してＮＯＲゲート４４８を介してカウンタ４４４に含まれるＸ軸用カウンタ４４４ＸとＹ軸用カウンタ４４４Ｙの計数値をリセット（０）させる。ジョイステック４５は、レバーの傾き方向のＸ軸方向とＹ軸方向に分解して傾き量に比例したパルス数を発生するように、Ｘ軸用とＹ軸用のフォトインタラプトを含み、それぞれのパルス信号をカウンタ４４４Ｘとカウンタ４４４Ｙに与える。カウンタ４４４Ｘは、ジョイスティック４５がＸ軸方向に傾けられたとき、その傾き量に応じて発生されるパルス数を計数する。カウンタ４４４Ｙは、ジョイスティック４５がＹ軸方向に傾けられたとき、その傾き量に応じて発生されるパルス数を計数する。従って、カウンタ４４４Ｘとカウンタ４４４Ｙとの計数値によって決まるＸ軸とＹ軸の合成ベクトルによって、主人公キャラクタまたはカーソルの移動方向と座標位置が決定されることになる。なお、カウンタ４４４Ｘおよびカウンタ４４４Ｙは、電源投入時にリセット信号発生回路４４７から与えられるリセット信号、またはプレイヤが予め定める２つのスイッチが同時に押圧されたときにスイッチ信号検出回路４４３から与えられるリセット信号によっても、その計数値がリセットされる。
【００２３】
スイッチ信号検出回路４４３は、制御回路４４２から一定周期（たとえば、テレビジョンのフレーム周期の１／３０秒間隔）で与えられるスイッチ状態の出力指令信号に応答して、十字スイッチ４０３，スイッチ４０４Ａ〜４０４Ｆ，４０５，４０６Ｌ，４０６Ｒおよび４０７の押圧状態によって変化する信号を読込み、それを制御回路４４２へ与える。
【００２４】
制御回路４４２は、コントローラ制御回路１７からの操作状態データの読出指令信号に応答して、各スイッチ４０３〜４０７の操作状態データおよびカウンタ４４４Ｘ，４４４Ｙの計数値を所定のデータフォーマットの順序で送信回路４４５に与える。送信回路４４５は、制御回路４４２から出力されたこれらのパラレル信号をシリアルデータに変換して、変換回路４３および信号線４２を介してコントローラ制御回路１７へ転送する。
【００２５】
また、制御回路４４２には、アドレスバスおよびデータバスならびにポートコネクタ４６を介してポート制御回路４４６が接続される。ポート制御回路４４６は、拡張装置の一例のＲＡＭカートリッジ５０がポートコネクタ４６に接続されているとき、ＣＰＵ１１の命令に従ってデータの入出力制御（または送受信制御）を行う。ＲＡＭカートリッジ５０は、アドレスバスおよびデータバスにＲＡＭ５１および時間関連情報発生手段の一例のタイマチップ（またはカレンダタイマ）５３を接続し、ＲＡＭ５１およびタイマカウンタ５３に電源を供給するための電池５２を接続し、さらに所定のアドレスが与えられたときタイマカウンタ５３を能動化するためのデコーダ５４とを含んで構成される。ＲＡＭ５１は、アドレスバスを用いてアクセス可能な最大メモリ容量の半分以下の容量のＲＡＭであって、たとえば２５６ｋビットのＲＡＭから成る。これは、アドレスバスの最上位ビットが「１」になったときにタイマチップ５３内の任意のカウンタの値を読み出すようにして、ＲＡＭの書込・読出アドレスとタイマチップ５３の読出アドレスとが重複しないようにするためである。このＲＡＭ５１は、ゲームに関連するバックアップデータを記憶するものであり、ＲＡＭカートリッジ５０がポートコネクタ４６から抜き取られても電池５２からの電源供給を受けて記憶データを保持するものである。なお、ＲＡＭ５１の記憶データの種類，データの書込みおよび記憶データの利用の詳細は、後述する。
【００２６】
図１０は、画像処理装置が、コントローラ４０からスイッチ４０３〜４０７およびジョイスティック４５の各操作状態を示すデータを読み出す際のデータフォーマットを図解したものである。コントローラ４０によって発生されるデータは４バイトのデータから成る。第１バイト目のデータは、Ｂ，Ａ，Ｇ，ＳＴＡＲＴ，上，下，左および右、すなわちスイッチ４０４Ｂ，４０４Ａ，４０７，４０５および十字スイッチ４０３の上下左右の各押点が押圧されていることを示し、たとえばＢボタンすなわちスイッチ４０４Ｂが押圧されると第１バイト目の最上位ビットが「１」となる。同様に、第２バイト目は、ＪＳＲＳＴ，０（実施例では使用していない），Ｌ，Ｒ，Ｅ，Ｄ，ＣおよびＦ、すなわちスイッチ４０９，４０６Ｌ，４０６Ｒ，４０４Ｅ，４０４Ｄ，４０４Ｃ，４０４Ｆが押圧されていることを示す。第３バイト目は、ジョイスティック４５のＸ方向の傾倒角度に応じた値であるＸ座標（Ｘカウンタ４４４Ｘの計数値）を２進数で示す。第４バイト目は、ジョイスティック４５のＹ方向の傾斜角度に応じた値であるＹ座標（Ｙカウンタ４４４Ｙの計数値）を２進数で示す。各Ｘ，Ｙ座標値はそれぞれ８ビットの２進数で表されるため、これを１０進数に変換するとジョイスティック４５の傾斜角度を０〜２５５までの数値を表すことができる。また、最上位ビットを負の値を示すシグネチャに用いれば、ジョイスティック４５の傾斜角度を−１２８〜１２７までの数値で表すことができる。
【００２７】
図１１〜図１４を参照して、画像処理装置１０とコントローラ４０との間で送受信される信号のフォーマットについて説明する。
図１１は、画像処理装置１０が、コントローラ４０のタイプを識別するためにコントローラ４０との間で送受信する信号のフォーマットを図解したものである。画像処理装置１０は、コントローラ４０内の制御回路４４２に対して１バイト（８ビット）で構成されるコマンド「０」のタイプデータ要求信号を送信し、これに応答して制御回路４４２が発生するＴＹＰＥ  Ｌ（１バイト），ＴＹＰＥ  Ｈ（１バイト）およびステータスの計３バイトのコントローラ４０のタイプデータ信号を受信する。ここで、ＴＹＰＥ  ＬおよびＴＹＰＥ  Ｈは、ジョイポートコネクタ４６に接続されている機器の機能を表すデータである。ＴＹＰＥ  ＬおよびＴＹＰＥ  Ｈデータは、ＲＡＭカートリッジに記憶されたＲＡＭカートリッジ５０のタイプ毎に固有のデータである。画像処理装置１０は、このデータに基づいて、コントローラ４０のタイプ、すなわちコントローラ４０に接続されたＲＡＭカートリッジ５０のタイプを識別する。ＲＡＭカートリッジ５０のタイプとしては、例えば単にＲＡＭ５１のみを搭載したタイプ，ＲＡＭ５１とタイマチップを搭載したタイプおよびＲＡＭ５１と液晶表示器を搭載したタイプ等があり、この実施例においてはＲＡＭ５１とタイマチップを搭載したタイプについて詳細に説明している。また、ステータスデータは、ポートにＲＡＭカートリッジ５０等の拡張装置が接続されているか否か、およびリセット後に拡張装置が接続されたか否かを示すデータである。
【００２８】
図１２は、画像処理装置１０が、コントローラ４０の操作状態を識別するためにコントローラ４０との間で送受信する信号のフォーマットを図解したものである。画像処理装置１０は、コントローラ４０内の制御回路４４２に対して１バイト（８ビット）で構成されるコマンド「１」のコントローラデータ要求信号を送信し、これに応答して制御回路４４２が発生するコントローラ４０の操作状態データ信号を受信する。これらの操作状態データに基づいて、画像処理装置１０は、操作者がコントローラ４０をどのように操作したかを認識し、画像を変化させるのに利用する。なお、操作状態データ信号については、図１０の説明で詳述したためここでは省略する。
【００２９】
図１３は、画像処理装置１０が、コントローラ４０に接続されたＲＡＭカートリッジ５０内のＲＡＭ５１からデータの読出しを行う際のリードデータ信号のフォーマットを図解したものである。画像処理装置１０は、制御回路４４２に対して、１バイト（８ビット）で構成されるコマンド２のリードコマンド信号，アドレスの上位ビットを示すアドレスＨ（８ビット）信号，アドレスの下位ビット（３ビット）を表わすアドレスＬ信号およびアドレスＨ信号とアドレスＬ信号のアドレスデータ送信エラーをチェックするためのアドレスＣＲＣ（５ビット）信号を送信し、これに応答して制御回路４４２が発生するＲＡＭ５１の記憶データ（３２バイト）信号およびデータ送信エラーをチェックするためのデータＣＲＣ（８ビット）信号を受信する。なお、画像処理装置１０が、タイマチップ５３の時間関連情報を読み出すには、単にアドレスＨ信号を８０ｈ以上の値にして８０００ｈ以上のアドレスを読み出せばよい。
【００３０】
図１４は、画像処理装置１０が、コントローラ４０に接続されたＲＡＭカートリッジ５０内のＲＡＭ５１へデータの書込みを行う際のライトデータ信号のフォーマットを図解したものである。画像処理装置１０は、制御回路４４２に対して、１バイト（８ビット）で構成されるコマンド３のライトコマンド信号，アドレスの上位ビットを示すアドレスＨ（８ビット）信号，アドレスの下位ビット（３ビット）を表わすアドレスＬ信号およびアドレスＨ信号，アドレスＬ信号のアドレスデータ送信エラーをチェックするためのアドレスＣＲＣ（５ビット）信号とＲＡＭ５１に書込むべき３２バイトの書込データ信号を送信し、これに応答して制御回路４４２が発生するデータ受信エラーをチェックするためのデータＣＲＣ（８ビット）信号を受信する。画像処理装置１０は、データＣＲＣ信号を受信して送信した書込データとＣＲＣチェックを行うことに基づいて、ＲＡＭ５１に正常にデータが書き込まれたことを判断する。なお、画像処理装置１０が、タイマチップに時間関連情報を書き込んで例えば年月日や時間を再設定するには、単にアドレスＨ信号を８０ｈ以上の値にして８０００ｈ以上のアドレスに書込みを行えばよい。
【００３１】
次に画像処理装置１０とコントローラ４０とのデータの送受信に関する動作説明をする。
まず、図１５の画像処理装置１０のＣＰＵ１１のフローチャートを参照して画像処理に関する説明を行う。ステップＳ１１で、ＣＰＵ１１は、図５のプログラムデータ領域２０２に記憶されている初期値（図示せず）に基づき、初期設定を行う。次に、ステップＳ１２で、ＣＰＵ１１は、プログラムデータ領域２０２に記憶されているコントールパッドデータ要求コマンドをバス制御回路１２に出力する。次に、ステップＳ１３で、ＣＰＵ１１は、図５のプログラムデータ領域２０２に記憶されているプログラムにおよび画像データ領域２０１に基づき所定の画像処理を行う。また、ＣＰＵ１１がステップＳ１３を実行しているときに、バス制御回路１２は、ステップＳ２１−Ｓ２４を実行している。次に、ステップＳ１４で、ＣＰＵ１１は、図３のコントロールパッドデータ領域１４１に記憶されているコントロールパッドデータに基づき画像データを出力する。ステップＳ１４を終了した後は、ＣＰＵ１１は、ステップＳ１２−ステップＳ１４を繰り返し実行する。
【００３２】
バス制御回路１２の動作を図１６を用いて説明する。ステップＳ２１で、バス制御回路１２は、ＣＰＵ１１がコントローラデータ要求コマンド（コントローラ４０のスイッチデータまたは拡張装置５０のデータ等の要求命令）を出力したか否かを判断する。コントローラデータ要求コマンドが出力されていなければ、出力されるまで待機する。コントローラデータ要求コマンドが出力されていれば、ステップＳ２２に移る。ステップＳ２２で、バス制御回路１２は、コントローラ制御回路１７にコントローラ４０のデータを読み込むためのコマンド（後に示すコマンド１またはコマンド２等）を出力する。次に、ステップＳ２３で、バス制御回路１２は、コントローラ制御回路１７がコントローラ４０からデータを受信してＲＡＭ１７４に記憶したか否かを判断する。バス制御回路１２は、コントローラ制御回路１７がコントローラ４０からデータを受信してＲＡＭ１７４に記憶していなければ、ステップＳ２３で待機し、コントローラ制御回路１７がコントローラ４０からデータを受信してＲＡＭ１７４に記憶していれば、ステップＳ２４に移る。ステップＳ２４で、バス制御回路１２は、コントローラ制御回路１７のＲＡＭ１７４に記憶されているコントローラ４０のデータをＷ−ＲＡＭ１４へ転送する。バス制御回路１２は、Ｗ−ＲＡＭ１４へのデータ転送が終わるとステップＳ２１に戻り、ステップＳ２１−ステップＳ２４の動作を繰り返す。
【００３３】
なお、図１５および図１６のフローチャートでは、バス制御回路１２がＲＡＭ１７４からＷ−ＲＡＭ１４ヘデータを転送した後、ＣＰＵ１１がＷ−ＲＡＭ１４に記憶されたデータを処理する例を示したが、ＣＰＵ１１がバス制御回路１２を介して直接ＲＡＭ１７４のデータを処理してもよい。
図１７はコントローラ制御回路１７の動作を説明するためのフローチャートである。ステップＳ３１において、バス制御回路１２からの書込み待ちの有無が判断される。書込み待ちでなければ、データ転送制御回路１７１はバス制御回路１２からの書込み待ちが有るまで待機する。書込み待ちで有れば、次のステップＳ３２において、データ転送制御回路１７１が第１〜第４チャンネルに対するコマンドおよび／またはデータ（以下「コマンド／データ」と略称する）をＲＡＭ１７４に記憶させる。ステップＳ３３において、第１チャンネルのコマンド／データがコネクタ１８１に接続されているコントローラ４０に送信される。制御回路４４２は、コマンド／データに基づいて所定の動作を行い、画像処理装置１０に送信すべきデータを出力する。このデータの内容は、制御回路４４２の動作説明で後述する。ステップＳ３４において、データ転送制御回路１７１が制御回路４４２から出力されたデータを受信し、そのデータをＲＡＭに記憶させる。
【００３４】
以後、ステップＳ３３およびＳ３４の第１チャンネルの動作と同様にして、ステップＳ３５において、第２チャンネルのコマンド／データがコントローラ４０に送信される。制御回路４４２は、このコマンド／データに基づいて所定の動作を行い、画像処理装置１０に送信すべきデータを出力する。ステップＳ３６において、第２チャンネルのデータ転送および書込処理が行われる。また、ステップＳ３７において、第３チャンネルのコマンド／データがコントローラ４０に送信される。制御回路４４２は、このコマンド／データに基づいて所定の動作を行い、画像処理装置１０に送信すべきデータを出力する。ステップＳ３８において、第２チャンネルのデータ転送および書込処理が行われる。さらに、ステップＳ３９において、第４チャンネルのコマンド／データがコントローラ４０に送信される。コントローラ４０の制御回路４４２は、このコマンド／データに基づいて所定の動作を行い、画像処理装置１０に送信すべきデータを出力する。ステップＳ４０において、第４チャンネルのデータ転送および書込処理が行われる。続くステップＳ４１において、データ転送制御回路１７１がステップＳ３４，Ｓ３６，Ｓ３８およびＳ４０において受信したデータを一括してバス制御回路１２へ転送する。
【００３５】
上述のようにして、第１チャンネルから第４チャンネルのデータ、すなわちコネクタ１８１〜１８４に接続されている各コントローラ４０に対するコマンドおよび各コントローラ４０から読出すべき操作状態データが時分割処理によってデータ転送制御回路１７１と各コントローラ４０内の制御回路４４２との間で転送される。
【００３６】
図１８はコントローラ回路４４の動作を説明するためのフローチャートである。まず、ステップＳ５１において、コマンドが画像処理装置１０から制御回路４４２に入力されたか否かが判断される。コマンドが入力されていなければ、コマンドが入力されるまで待機する。コマンドが入力されると、ステップＳ５２において、制御回路４４２に入力されたコマンドがステータス要求コマンド（コマンド「０」）であるか否かが判断される。コマンド「０」の場合は、ステップＳ５３へ進み、ステータス送出処理が行われる。
【００３７】
ステップＳ５３において、ＣＰＵ１１がコマンド「０」を出力した場合、画像処理装置１０とコントローラ４０との間で図１３に示すフォーマットのデータが送受信される。このとき、制御回路４４２は、１バイト（８ビット）で構成されるコマンド「０」のデータを受信すると、ＴＹＰＥ  Ｌ（１バイト），ＴＹＰＥＨ（１バイト）およびステータスを送信する。ここで、ＴＹＰＥ  ＬおよびＴＹＰＥ  Ｈは、ジョイポートコネクタ４６に接続されている機器がどんな機能を有するかを識別するデータであり、ＲＡＭカートリッジ５０に記録されている固有のデータである。これによって、画像処理装置１０は、コントローラ４０にどの様な拡張装置（たとえば、ＲＡＭカートリッジ５０または液晶表示器等のその他の拡張機器）が接続されているかを認識することが可能となる。ステータスは、ポートにＲＡＭカートリッジ５０等の拡張装置が接続されているか否か、およびリセット後に拡張装置が接続されたか否かを示すデータである。
【００３８】
一方、ステップＳ５２においてコマンド「０」でないことが判断されると、ステップＳ５４において入力されたコマンドがパッドデータ要求コマンド（コマンド「１」）であるか否かが判断される。コマンド「１」の場合は、ステップＳ５５へ進み、パッドデータの送出処理が行われる。具体的には、ＣＰＵ１１がコマンド「１」を出力した場合は、画像処理装置１０とコントローラ４０との間で図１４に示すフォーマットのデータが送受信される。このとき、制御回路４４２は、１バイト（８ビット）で構成されるコマンド１のデータを受信すると、Ｂ，Ａ，Ｇ，ＳＴＡＲＴ，上，下，左，右，Ｌ，Ｒ，Ｅ，Ｄ，Ｃ，Ｆの１４個のスイッチのデータ（１６ビット）とＪＳＲＳＴ（１ビット）とカウンタ４４４Ｘおよびカウンタ４４４Ｙのデータ（１６ビット）を送信する。これらのデータを画像処理装置１０に送信することによって、操作者がコントローラ４０をどのように操作したかを画像処理装置１０に認識させ、画像処理装置１０がコントローラ４０の操作状態に応じて画像を変化させるのに利用される。
【００３９】
前述のステップＳ５４においてコマンド「１」でないことが判断されると、続くステップＳ５６において入力されたコマンドが拡張コネクタに接続されるＲＡＭカートリッジ５０に関連するデータの読出要求コマンド（コマンド「２」）であるか否かが判断される。コマンド「２」の場合は、ステップＳ５７へ進み、拡張コネクタ書き出し処理が行われる。具体的には、ＣＰＵ１１がコマンド「２」を出力した場合は、画像処理装置１０とコントローラ４０との間で図１５に示すフォーマットのデータが送受信される。このとき、制御回路４４２は、１バイト（８ビット）で構成されるコマンド２のデータ，アドレスの上位ビットを示すアドレスＨ（８ビット），アドレスの下位ビット（３ビット）を表わすアドレスＬおよび送受信のアドレスデータエラーをチェックするためのアドレスＣＲＣ（５ビット）を受信すると、受信したアドレスデータに基づいて、ＲＡＭカートリッジに記憶されているデータ（３２バイト）およびデータエラーをチェックするためのＣＲＣ（８ビット）を送信する。このように、ＲＡＭカートリッジ５０（または他の拡張装置）と画像処理装置１０とが接続されることにより、画像処理装置１０がＲＡＭカートリッジ５０等からのデータを処理することができる。
【００４０】
前述のステップＳ５６においてコマンド「２」でないことが判断されると、続くステップＳ５８において入力されたコマンドが拡張コネクタ４６に接続されているＲＡＭカートリッジ５０に関連する情報の読込要求コマンド（コマンド「３」）か否かが判断される。コマンド「３」の場合は、ステップＳ５９において拡張コネクタ４６に接続されているＲＡＭカートリッジ５０のデータ読出処理が行われる。具体的には、ＣＰＵ１１がコマンド「３」を出力すると、コマンド「３」に応答して図３に示すデータが画像処理装置１０とコントローラ４０との間で送受信される。
【００４１】
つまり、制御回路４４２は、１バイト（８ビット）で構成されるコマンド３のデータ，アドレスの上位ビットを示すアドレスＨ（８ビット），アドレスの下位ビット（３ビット）を表わすアドレスＬ，送受信のアドレスデータエラーをチェックするためのアドレスＣＲＣ（５ビット）およびＲＡＭカートリッジ５０に送信すべきデータ（３２バイト）を受信すると、受信したデータに対してエラーをチェックするためのＣＲＣ（８ビット）を送信する。このように、拡張装置５０と画像処理装置１０とが接続されることにより、画像処理装置１０が拡張装置５０を制御可能となる。また、このように、拡張装置５０と画像処理装置１０とが接続されることにより、コントローラ４０の機能を飛躍的に向上させることができる。
【００４２】
前述のステップＳ５８においてコマンド「３」でないことが判断されると、ステップＳ６０においてリセットコマンド（コマンド２５５）であるか否かが判断される。リセットコマンド（２５５）の場合は、ステップＳ６１においてジョイスティック４５のカウンタ４４４のリセット処理が行われる。
具体的には、ＣＰＵ１１がコマンド２５５を出力した場合、画像処理装置１０とコントローラ４０との間では、図２１に示すデータが送受信される。つまり、コントローラ４０の制御回路４４２は、１バイト（８ビット）で構成されるコマンド２５５のデータを受信すると、リセット信号を出力し、Ｘカウンタ４４４ＸおよびＹカウンタ４４４Ｙをリセットし、前述のＴＹＰＥ  Ｌ（１バイト），ＴＹＰＥ  Ｈ（１バイト）およびステータスを送信する。
【００４３】
次に、この発明の特徴である三次元空間におけるカメラ（視点）の回り込みについて説明する。つまり、従来の３Ｄゲームでは、図２０に示すようにカメラと操作オブジェクト（たとえば、マリオ）との間に他のオブジェクト（たとえば、壁や敵キャラクタ）が存在するとき、操作オブジェクトすなわちマリオをカメラで写すことはできなかった。これに対して、この発明では、図２０の点線で示すように、カメラをマリオの側面に回り込ませて常にマリオを表示し続けることができる。
【００４４】
簡単にいえば、図２１に示す状態にあるとき、マリオからカメラまでの間の直線上の数点でマリオ側から地形のポリゴンとの衝突判定を行う。このとき、各点から半径Ｒの内部でＸＺ平面に垂直なポリゴンをチェックする。そして、衝突判定がなされたポリゴンＰについてカメラの回り込み処理を行う。壁面Ｐは数１の平面方程式によって表される。
【００４５】
【数１】
Ａｘ＋Ｂｙ＋Ｃｚ＋Ｄ＝０
そして、カメラ位置（撮影位置）の補正はこの面Ｐに対して平行になるようにカメラ位置を移動させる。なお、面に平行なＹ軸の角度は面の方程式によって算出される。
【００４６】
より詳しく説明すると、図２２の最初のステップＳ１０１において、衝突判定すべきポリゴンの番号ｎを初期化（ｎ＝１）する。次のステップＳ１０２では、チェックすべきポリゴンの数Ｎとポリゴンの番号ｎとが等しいかどうか、つまり全てのポリゴンについて衝突判定を行ったかどうかを判断する。このステップＳ１０２で“ＮＯ”なら、次のステップＳ１０３において衝突判定を行う。
【００４７】
図２３にこのステップＳ１０３すなわち衝突判定ルーチンが詳細に示される。この衝突判定ルーチンの説明に先立って、衝突判定すべき壁データは図２４および図２５に示される。つまり、壁データは図２５のような三角形ポリゴンの集合として図２４のように表され、このようなそれぞれのポリゴンは壁ポリゴンのリストとしてメモリに格納されている。
【００４８】
図２３の最初のステップＳ２０１では、点Ｑ（Ｘｇ，Ｙｇ，Ｚｇ）および半径Ｒを入力する。なお、点Ｑはチェックすべき点であり、半径Ｒは壁と衝突するとみなす距離である。次のステップＳ２０２では、壁当たりフラグをリセットする。そして、ステップＳ２０３では、先に説明した壁ポリゴンリストがメモリ内に格納されているかどうか判断する。壁ポリゴンリストがあれば、次のステップＳ２０４においてそのポリゴンがカメラの回り込み処理をすべきポリゴンであるかどうかを判断する。このステップＳ２０４において“ＹＥＳ”ならステップＳ２０５に進む。
【００４９】
ステップＳ２０５では、点Ｑと壁ポリゴンの平面との距離（ｄＲ）を数２に従って計算する。
【００５０】
【数２】
ｄＲ＝ＡＸｇ＋ＢＹｇ＋ＣＺｇ＋Ｄ
そして、ステップＳ２０６において、ステップＳ２０５で計算した距離ｄＲが半径Ｒより小さいかどうか判断する。この距離ｄＲが半径Ｒより大きいときは、マリオと壁とは衝突しないので、先のステップＳ２０３に戻る。
【００５１】
ステップＳ２０６で“ＹＥＳ”が判断されたとき、すなわち｜ｄＲ｜＜Ｒのとき、ステップＳ２０７において点Ｑから壁ポリゴンＰへ垂直に引いた直線と壁ポリゴン平面との接する点Ｑ′の位置座標（Ｘｇ′，Ｙｇ′，Ｚｇ′）を、数３に従って計算する。
【００５２】
【数３】
Ｘｇ′＝Ｘｇ＋Ａ×ｄＲ
Ｙｇ′＝Ｙｇ＋Ｂ×ｄＲ
Ｚｇ′＝Ｚｇ＋Ｃ×ｄＲ
そして、次のステップＳ２０８で点Ｑ′がポリゴンの内側（範囲内）であるか否かをチェックする。
【００５３】
このステップＳ２０８では、まず、壁の向き（Ａの値）に応じて投影する面を決定する。すなわち、Ａ＜−０．７０７またはＡ＞０．７０７のときには図２６に示すＹＺ平面に投影し、それ以外のときには図２６のＸＹ平面に投影する。そして、ＹＺ平面に投影する場合、図２７において、点Ｑ′がポリゴンＰ１の内側にあるかどうかを判定する。
【００５４】
またＸＹ平面に投影する場合、図２８で点Ｑ′とポリゴンＰ１の各頂点の座標について左回りの外積値の正負を判断する。つまり、ポリゴン平面方程式におけるＣがＣ≧０のときは、外積の結果が全て０または負ならば点Ｑ′はポリゴンＰ１の内側にあると判断する。
【００５５】
【数４】
（Ｙ１−Ｙｑ）  ×（Ｘ２−Ｘ１）  −（Ｘ１−Ｘｑ）  ×（Ｙ２−Ｙ１）  ≦０
（Ｙ２−Ｙｑ）  ×（Ｘ３−Ｘ２）  −（Ｘ２−Ｘｑ）  ×（Ｙ３−Ｙ２）  ≦０
（Ｙ３−Ｙｑ）  ×（Ｘ１−Ｘ３）  −（Ｘ３−Ｘｑ）  ×（Ｙ１−Ｙ３）  ≦０
またＣ＜０のときは、外積の結果が全て０または正ならば点Ｑ′がポリゴンＰ１の内側にあると判断する。
【００５６】
【数５】
（Ｙ１−Ｙｑ）  ×（Ｘ２−Ｘ１）  −（Ｘ１−Ｘｑ）  ×（Ｙ２−Ｙ１）  ≧０
（Ｙ２−Ｙｑ）  ×（Ｘ３−Ｘ２）  −（Ｘ２−Ｘｑ）  ×（Ｙ３−Ｙ２）  ≧０
（Ｙ３−Ｙｑ）  ×（Ｘ１−Ｘ３）  −（Ｘ３−Ｘｑ）  ×（Ｙ１−Ｙ３）  ≧０
このようにしてステップＳ２０８で点Ｑ′がポリゴンの内側か否かをチェックし、ステップＳ２０９で点Ｑ′がポリゴンの内側かどうか判断する。このステップＳ２０９で“ＹＥＳ”なら、先のステップＳ２０２でリセットした壁当たりフラグをセットする（ステップＳ２１０）。その後、図２２にリターンする。
【００５７】
ただし、上述の衝突判定は一例であり、他の方法によっても衝突判定可能なことはいうまでもない。
図２２に戻って、ステップＳ１０３の衝突判定の後、ステップＳ１０４で壁当たりフラグがセットされているかどうかを判断する。このステップＳ１０４で“ＮＯ”なら、回り込み処理は必要ないので、ステップＳ１０５でチェックする点の番号ｎをインクリメントしてステップＳ１０２に戻る。
【００５８】
ステップＳ１０４で“ＹＥＳ”なら、次に、ステップＳ１０６およびＳ１０７において壁の裏かどうかを判断する。つまり、ポリゴンの向きを判断する。ポリゴンがカメラ（視点）を向いているかどうかは、図２９の面の法線ベクトルＮと視線ベクトルＶとの内積の符号を調べることにより判定することができる。その条件式は数６で与えられる。
【００５９】
【数６】
Ａ＝Ｖ・Ｎ＝ＶｘＮｘ＋ＶｙＮｙ＋ＶｚＮｚ
そして、Ａ≧０なら壁はカメラの方向を向いている（表）と、またＡ＜０なら壁は裏を向いているとそれぞれ判断できる。そして、カメラとマリオとの間に存在する面がカメラに向かって表向きならば、図３０のカメラの回り込み処理をしない。この場合、ステップＳ１０５において点の番号ｎをインクリメントしてステップＳ１０２に戻る。
【００６０】
カメラとマリオとの間の面が裏向きならばステップＳ１０７で“ＹＥＳ”となり、次のステップＳ１０８およびＳ１０９において回り込み処理を行う。ステップＳ１０８では、壁の平面方程式に基づいてカメラの位置（撮影位置）を変更するための移動角度を計算する。すなわち、平面上の３点Ｐ１（Ｘ１，Ｙ１，Ｚ１）、Ｐ２（Ｘ２，Ｙ２，Ｚ２）およびＰ３（Ｘ３，Ｙ３，Ｚ３）による平面の方程式は数７の多項式で表される。
【００６１】
【数７】
Ａｘ＋Ｂｙ＋Ｃｚ＋Ｄ＝０
ただし、Ａ＝Ｙ１（Ｚ２−Ｚ３）＋Ｙ２（Ｚ３−Ｚ１）＋Ｙ３（Ｚ１−Ｚ２）
Ｂ＝Ｚ１（Ｘ２−Ｘ３）＋Ｚ２（Ｘ３−Ｘ１）＋Ｚ３（Ｘ１−Ｘ２）
Ｃ＝Ｘ１（Ｙ２−Ｙ３）＋Ｘ２（Ｙ３−Ｙ１）＋Ｘ３（Ｙ１−Ｙ２）
Ｄ＝Ｘ１（Ｙ２Ｚ３−Ｚ２Ｙ３）＋Ｙ１（Ｚ２Ｘ３−Ｘ２Ｚ３）＋Ｚ１（Ｘ２Ｙ３−Ｙ２Ｘ３）
そして、法線ベクトルのＹ軸の角度Ｒｙは数８である。
【００６２】
【数８】
Ｒｙ＝  ｔａｎ−１（Ａ／Ｃ）
したがって、カメラの回り込み角度はＲｙ＋９０°かＲｙ−９０°のどちらかである。つまり、ステップＳ１０９において、カメラはマリオすなわち操作オブジェクトを中心にＲｙ＋９０°かＲｙ−９０°の方向に回転移動される。具体的には、現在のカメラ位置（図２１のＣ）から近い位置に移動される。
【図面の簡単な説明】
【図１】この発明の一実施例を示す概略図解図である。
【図２】図１実施例の画像処理装置を詳細に示すブロック図である。
【図３】図２実施例のＣＰＵのメモリマップを示す図解図であり、カートリッジに内蔵されている外部メモリおよびＷ−ＲＡＭを示す。
【図４】図２実施例におけるコントローラ制御回路を詳細に示すブロック図である。
【図５】データの変復調方法を示す図解図である。
【図６】図４のＲＡＭのメモリマップを示す図解図である。
【図７】図２実施例のコントローラの上から見た斜視図である。
【図８】図２実施例のコントローラの下から見た斜視図である。
【図９】コントローラおよび拡張装置を詳細に示すブロック図である。
【図１０】コントローラのアナログジョイスティックおよび各ボタンのデータを示す図解図である。
【図１１】コントローラ制御回路からコマンド”０”が送信されたときの制御回路の送受信データを示す図解図である。
【図１２】コントローラ制御回路からコマンド”１”が送信されたときの制御回路の送受信データを示す図解図である。
【図１３】コントローラ制御回路からコマンド”２”が送信されたときの制御回路の送受信データを示す図解図である。
【図１４】コントローラ制御回路からコマンド”３”が送信されたときの制御回路の送受信データを示す図解図である。
【図１５】図２実施例のＣＰＵの動作を示すフローチャートである。
【図１６】図２実施例のバス制御回路の動作を示すフローチャートである。
【図１７】図２実施例のコントローラ制御回路の動作を示すフローチャートである。
【図１８】図２実施例のコントローラ回路の動作を示すフローチャートである。
【図１９】コントローラ制御回路からコマンド”２５５”が送信されたときの制御回路の送受信データを示す図解図である。
【図２０】操作オブジェクト（マリオ）とカメラとの間に壁が存在する状態を示す図解図である。
【図２１】図２０の状態を座標で示す図解図である。
【図２２】カメラの回り込み処理のための動作を示すフローチャートである。
【図２３】衝突判定ルーチンを示すフローチャートである。
【図２４】壁ポリゴンを示す図解図である。
【図２５】各ポリゴンを示す図解図である。
【図２６】投影面を示す図解図である。
【図２７】ＹＺ平面に投影した状態を示す図解図である。
【図２８】ＸＹ平面に投影した状態を示す図解図である。
【図２９】面の法線ベクトルおよびカメラの視線ベクトルを示す図解図である。
【符号の説明】
１０  …画像処理装置本体
１１  …ＣＰＵ
１７  …コントローラ制御回路
２０  …ＲＯＭカートリッジ
３０  …ディスプレイ
４０  …コントローラ
４５  …ジョイスティック
５０  …ＲＡＭカートリッジ
【図１】
0003544268.tif 000002
【図２】
0003544268.tif 000003
【図３】
0003544268.tif 000004
【図４】
0003544268.tif 000005
【図５】
0003544268.tif 000006
【図６】
0003544268.tif 000007
【図７】
0003544268.tif 000008
【図８】
0003544268.tif 000009
【図９】
0003544268.tif 000010
【図１０】
0003544268.tif 000011
【図１１】
0003544268.tif 000012
【図１２】
0003544268.tif 000013
【図１３】
0003544268.tif 000014
【図１４】
0003544268.tif 000015
【図１５】
0003544268.tif 000016
【図１６】
0003544268.tif 000017
【図１７】
0003544268.tif 000018
【図１８】
0003544268.tif 000019
【図１９】
0003544268.tif 000020
【図２０】
0003544268.tif 000021
【図２１】
0003544268.tif 000022
【図２２】
0003544268.tif 000023
【図２３】
0003544268.tif 000024
【図２４】
0003544268.tif 000025
【図２５】
0003544268.tif 000026
【図２６】
0003544268.tif 000027
【図２７】
0003544268.tif 000028
【図２８】
0003544268.tif 000029
【図２９】
0003544268.tif 000030