KUNISAN.JPブログコメント書き込み



プチコン4でポリゴン描写の実験

名前: 小川 邦久 リンク: https://kunisan.jp 日付: 2020年12月13日
プチコン4でポリゴン描写の実験今までPython+Pygameやプチコン4で疑似3Dゲームをいくつか作りましたが、より三次元的とも言える「ポリゴン」は作ったことがありませんでした(ちなみに、プチコン4には3D関連の命令は備わっていません)。先日、ふと「立体の中心にX軸、Y軸、Z軸を通し、立体の各頂点をそれぞれの軸で回転させればポリゴンも実現できるのではないか?」と思い浮かび、早速プチコン4でポリゴンの実験プログラムを作ってみることにしました。3次元の座標を2次元に変換する手法は、いつもの関数(Z座標に比例した数で1を割り算したものを縮小率とする)、軸の回転は回転行列を使います。

まずは各面の表示の順番を考える必要のない「ワイヤーフレーム」の立方体から作ってみました。回転行列のところでちょっとした勘違いがあって、少し時間がかかってしまいましたが、それ以外はほぼ頭の中で思い描いた通りに作ることができました。
※このワイヤーフレームも以降の他のプログラムも、Joy-Conで回転や移動の操作が可能なものです。動画の最後の方でプログラムを確認できます。



続いて6面色違いの立方体を作ってみました。グラフィック面に三角形を描く「GTRI」という命令で、三角形を合計12個描写する形です。グラフィック面での描写になるので、各面(三角形x2枚)の描写の順番を「向こう側からこちら側(最前面を最後に描写)」に合わせる必要があります。これについては当初、頂点座標等の配列変数を各三角形の中心のZ座標を基準にRSORT(逆順)で並び替えたのですが、これだと時折向こう側の三角形の一部がこちら側に表示されてしまう不具合が発生してしまいました。そのため「面の中心から座標0,0,-200(カメラの位置)までの距離」を基準に配列変数を逆順に並び替えた所、今度はうまく表示されるようになりました。



ちなみに一般的なポリゴンは三角形を単位図形として、これを多数構成して描写することが多いようです。私は最初、「四角形のスプライトを自由に変形できれば、ポリゴンも楽に表現できるのに」と考えてしまいました。しかし、「一般的な手法」ということであれば、「三角形をいくつも構成する方法で慣れておくのも悪くないかな」と思うようになりました。

今度は「プチコン4では処理落ちせずに三角形をいくつまで描写できるのだろう?」ということで、球体に三角形をいくつも貼り付けた形のものを作ってみました。当初は300個位で画面にチラつきが発生するようになってしまったのですが、これはプチコン4のVSYNC命令がグラフィックの描画の完了を待たずに画面を更新してしまうからのようです。そのため、GTARGETとSPPAGEを用いて、フレーム毎に描画面と表示画面を切り替える形にしたところ、600個位までは問題なく表示できるようになりました(動画は三角形600個のものです)。この数を超えてもチラつきは発生しないのですが、今度は処理速度に遅延が発生するようになります。



最後に今回の一連の実験のおさらいとして、三角形24枚で構成した異形(6方向に尖ったもの)を作成してみました。さらに光源の概念も入れ込んでみました。面の光の強さは、「面の法線ベクトル(単位ベクトル)を外積で算出し、それを光源からのベクトル(単位ベクトル)で内積したもの」としています。本当なら尖った部分の影が異形の本体にも反映されないとリアルとは言えないですが、まあそこまではさすがにいいかなということで、これにてポリゴンの実験は一区切りということにします。



ここからゲームとして発展できればいいのですが、今のところは具体的なアイデアが無いので、また後日何かひらめいたら作ってみたいと思います。それにしても、三次元の回転行列、外積、内積などが出てきて、久しぶりに頭が数式でいっぱいになってしまいました。





プチコン4関連記事(リンク一覧): プチリバーシ - プチコン4でシンプルなオセロ風ゲーム / プチエアホッケー - プチコン4でシンプルなエアホッケーゲーム / ムカデ四匹対戦ゲーム - プチコン4でCOM対戦型ゲーム / 慣性シューティング イネルシア - プチコン4でエクセリオン風ゲーム / フルーツ好きのアルパカさん - プチコン4で物理演算系ジャンプアクションゲーム / ...(記事連続表示)


プチコン4 SmileBASIC 公式リファレンスブック
プチコン4 SmileBASIC 公式リファレンスブック をAmazon.co.jpでチェック


1)商品の宣伝、宗教や政治活動の勧誘など、本サイトの趣旨に合わない書き込みはご遠慮ください。
2)個人、団体への誹謗中傷や、差別的な発言、公序良俗に反する表現は禁止します。
3)本ブログへの書き込みによって何らかの問題が発生した場合、KUNISAN.JP管理者までご連絡いただければ、内容の修正、削除を行います(その他の責任については負いかねます)。
4)製作者サイドの都合により、予告無く書き込みの一部または全てが削除されることがあります。あらかじめご了承ください。
5)迷惑メールやコンピュータウィルス被害を防止するため、必要な場合以外にはメールアドレスを書き込まないことをお勧めします。

タイトル
お名前 (※必須)
Eメール
ホームページ

コメント (※必須)


画像ファイル(サイズ:10MB以下 形式:gif,jpeg,jpg,png)