コメント
Unknown
(
ケンケン
)
2014-12-18 00:55:54
拡大縮小回転ビデオシステムをご紹介いただきありがとうございます。
このシステムを使って、シューティングゲームも作りましたので、合わせて紹介させていただきます。
http://www.ze.em-net.ne.jp/~kenken/veludda/index.html
使用しているPIC32MX370F512Hというのは、速度とメモリ容量から私のお気に入りチップになりました。やや入手性に難があるのが残念ですが。
Unknown
(
nekosan
)
2014-12-18 23:15:41
ケンケンさん、
シューティングゲームのムービーも拝見しました。
速度も動きも、滑らかでイイカンジですよね。
これって、内部的には「描画窓」という部分に回転前のマップを描いおいてから、それを元に回転の計算して、「表示領域」に回転後のマップデータを作って、それを表示している感じなんでしょうかね。
それとも、ひとたび「描画窓」を用意したら、あとは回転計算をリアルタイムで行いながら「表示領域」内のマップを出力していってるんでしょうかね?
後者だと、カラーサブキャリアのタイミングをずらさずにやるのは難しそうだし、前者だと1コマ表示を進めるのに毎度1画面分全部回転させながら転送する必要があると思うので、どっちにしても処理能力的に大変そうだなぁと…
ちなみに、回転・拡大縮小と併せて、斜め上から見下ろす視点とかの計算も盛り込めたりするんですかね?
スーパーマリオカートとかF-ZEROみたいな。(欲張り過ぎ?)
Unknown
(
ケンケン
)
2014-12-19 01:28:58
nekosanさん
描画窓はVRAMそのものです。ただ、このシステムでは必ずしもVRAM全体を画面表示するわけではありません。
描画窓自体は回転前の状態で、そこからNTSC信号をリアルタイムで生成、出力する際に、普通はVRAMの先頭から1番地ずつ進めていきますが、このシステムは開始位置とスキャンする方向を水平、垂直それぞれベクトルで指定できます。このスキャンベクトルを回転行列を使って水平、垂直で直行を保てば回転表示になりますし、ベクトルを小さくすると拡大表示となります。
VRAMの構造を256×256ドット、スキャンベクトルを整数部8ビット+小数部8ビットと単純なものにしたので、なんとかリアルタイムで読み出し位置を移動させながら、NTSC信号生成することができました。
で、斜め上から見下ろす視点にできるかですが、残念ながらできません。スキャンベクトルを直行でなくした場合、平行四辺形の領域を歪ませて画面表示することになりますが、斜め上から見下ろす視点では台形にする必要があると思います。
私もこれで3Dゲームが作れるかな、と思って考えたのですが、ダメでした。
Unknown
(
nekosan
)
2014-12-20 00:36:26
>描画窓自体は回転前の状態で、そこからNTSC信号をリアルタイムで生成
なるほど。そうなんですか。とすると、描画が崩れない範囲で、拡大縮小やスクロールの速度は、べらぼうに上げることが出来るっていう仕様ですね。
もし、回転変換を掛けたあとのイメージを作って、それを表示しているとしたら、描画途中の中途半端な状態が表示されてたりして、波打ったりとか、変な表示になるかもと思ってたので、納得です。スクロールや回転、波打ってませんでしたからね。
それにしても、回転行列の計算とNTSCのカラー表示をリアルタイムで並行してやっちゃうっていうのは、速いですよね。
行列計算で座標系を変換掛けているのであれば、もしかしたら変換の行列を弄るだけで、斜め上からの3D視線もって思ったんですが、計算がだいぶ面倒になっちゃいますからね…
(多分、回転や拡大縮小は2×2の行列ですが、斜め上視点だと3×3行列?)
コメントを投稿する
名前
タイトル
URL
コメント
※絵文字はjavascriptが有効な環境でのみご利用いただけます。
▼ 絵文字を表示
携帯絵文字
リスト1
リスト2
リスト3
リスト4
リスト5
ユーザー作品
▲ 閉じる
コメント利用規約
に同意の上コメント投稿を行ってください。
コメント利用規約に同意する
数字4桁を入力し、投稿ボタンを押してください。
このシステムを使って、シューティングゲームも作りましたので、合わせて紹介させていただきます。
http://www.ze.em-net.ne.jp/~kenken/veludda/index.html
使用しているPIC32MX370F512Hというのは、速度とメモリ容量から私のお気に入りチップになりました。やや入手性に難があるのが残念ですが。
シューティングゲームのムービーも拝見しました。
速度も動きも、滑らかでイイカンジですよね。
これって、内部的には「描画窓」という部分に回転前のマップを描いおいてから、それを元に回転の計算して、「表示領域」に回転後のマップデータを作って、それを表示している感じなんでしょうかね。
それとも、ひとたび「描画窓」を用意したら、あとは回転計算をリアルタイムで行いながら「表示領域」内のマップを出力していってるんでしょうかね?
後者だと、カラーサブキャリアのタイミングをずらさずにやるのは難しそうだし、前者だと1コマ表示を進めるのに毎度1画面分全部回転させながら転送する必要があると思うので、どっちにしても処理能力的に大変そうだなぁと…
ちなみに、回転・拡大縮小と併せて、斜め上から見下ろす視点とかの計算も盛り込めたりするんですかね?
スーパーマリオカートとかF-ZEROみたいな。(欲張り過ぎ?)
描画窓はVRAMそのものです。ただ、このシステムでは必ずしもVRAM全体を画面表示するわけではありません。
描画窓自体は回転前の状態で、そこからNTSC信号をリアルタイムで生成、出力する際に、普通はVRAMの先頭から1番地ずつ進めていきますが、このシステムは開始位置とスキャンする方向を水平、垂直それぞれベクトルで指定できます。このスキャンベクトルを回転行列を使って水平、垂直で直行を保てば回転表示になりますし、ベクトルを小さくすると拡大表示となります。
VRAMの構造を256×256ドット、スキャンベクトルを整数部8ビット+小数部8ビットと単純なものにしたので、なんとかリアルタイムで読み出し位置を移動させながら、NTSC信号生成することができました。
で、斜め上から見下ろす視点にできるかですが、残念ながらできません。スキャンベクトルを直行でなくした場合、平行四辺形の領域を歪ませて画面表示することになりますが、斜め上から見下ろす視点では台形にする必要があると思います。
私もこれで3Dゲームが作れるかな、と思って考えたのですが、ダメでした。
なるほど。そうなんですか。とすると、描画が崩れない範囲で、拡大縮小やスクロールの速度は、べらぼうに上げることが出来るっていう仕様ですね。
もし、回転変換を掛けたあとのイメージを作って、それを表示しているとしたら、描画途中の中途半端な状態が表示されてたりして、波打ったりとか、変な表示になるかもと思ってたので、納得です。スクロールや回転、波打ってませんでしたからね。
それにしても、回転行列の計算とNTSCのカラー表示をリアルタイムで並行してやっちゃうっていうのは、速いですよね。
行列計算で座標系を変換掛けているのであれば、もしかしたら変換の行列を弄るだけで、斜め上からの3D視線もって思ったんですが、計算がだいぶ面倒になっちゃいますからね…
(多分、回転や拡大縮小は2×2の行列ですが、斜め上視点だと3×3行列?)