投稿
かたけ~ katakei05
3Dポリゴンはどのようにすれば描画できるのでしょうか・・・というか動かせるのでしょうか・・・誰かこの分野に詳しい人教えてください!
1そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
プチコン3号には3Dポリゴンを扱うための命令はありません。(三角形を描画するGTRIがあるくらい) したがって、すべて自前で記述する必要があります。 大ざっぱな流れを書いておくとまずは頂点データとポリゴン面のデータを用意しておきます。 プチコン3号用のモデリングソフトは公開されてないため自分で作るか脳内で計算するしかありません。 私はプチコンmkIIでポリゴンプログラムを作った時にはすべて脳内で計算しましたが、100ポリゴンくらいまでのモデルならば何とかなります。 頂点データを作る場合には回転の中心座標を原点にしたローカル座標で記述するのが一般的です。 ポリゴン面のデータは多角形であっても三角形を組み合わせて描画が可能であるため表示する三角形のデータは何番と何番と何番の頂点を結んでできたものなのかというデータを用意します。
0そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
あとはそのモデルがカメラからどのように見えるのかを計算してやれば良いだけです。 モデルが回転していたり、カメラが地面(XZ平面)に対して平行ではない場合は回転行列を使えばその座標は求まります。 あとはカメラの描画範囲を決めてやれば画面上での頂点座標が求まります。 これはビュー変換やプロジェクション変換と呼ばれています。 画面上の座標が求まればそれをGLINEでつなげばワイヤーフレームならば完成です。 ポリゴンの場合は単純にGTRIで描画すればOKかというとそうでもありません。
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
ポリゴンの場合は裏表の判断をしなくてはならないし、表示する順番も考慮する必要があります。 順番を考えないとポリゴンが欠けたりします。(この処理はZソートと呼ばれています) 裏表の判断は法線ベクトルを元にすれば計算できます。 あとは光源を設定しておけば陰影を付けることが可能ですが、処理速度の問題からリアルタイムで可能なのは平行光源によるフラットシェーディングくらいでしょう。 これもベクトルの内積を使えば簡単に求まります。 テクスチャマッピングはGPSETを使うと非常に遅くなるしスプライトで処理するならば表示の整合性を採るのが難しいのでリアルタイム表示を行う(実際にポリゴンモデルを動かす)ならばテクスチャマッピングには手を出さない方が無難でしょう。
0そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
すごくざっくりとした説明ですが実際に詳しく説明すると長くなりすぎるので割愛させていただきました。 さらに詳しい説明が必要ならば「プチコン ポリゴン表示」などのキーワードでネット検索すると良いでしょう。 ちなみにプチコンmkIIでは24面体の表示でフラットシェーディングを行った場合に13~14fpsくらい出ました。(実効で300ポリゴン/秒くらい) プチコン3号ではNew3DSで実行時にはmkIIと比べて20~30倍程度の速度が出るし専用命令GTRIによって三角形描画はmkIIと比べて非常に速いため1万ポリゴン/秒以上になりそうな期待がありましたが、配列変数が遅いためリアルタイムゲームを作るにはある程度の工夫が求められると思います。
0そうだね
プレイ済み
返信[5]
親投稿
かたけ~ katakei05
詳しく教えていただきありがとうございます。 やっぱり奥が深いですね。 手をつけるのはもう少しあとにしますw
1そうだね
プレイ済み
返信[6]
親投稿
ASA fusuian
3Dポリゴンの前に3Dワイヤーフレームという技術があります。 おちゃめさんも解説の2番目で書いていますが、立体の頂点の位置だけ求めて、枠だけ描くと、針金細工の立体物みたいに見えるわけです。針金の枠でワイヤーフレームですね。 3Dを2Dにするビュー変換もなかなかに大変なプログラミングなので、手始めは三角形を回転行列で回転させる、2Dワイヤーフレームからですかね?
1そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
ポリゴンの前にまずはワイヤーフレームに挑戦した方がベターですね。 ワイヤーフレームの場合はモデルを回転させない場合は行列やベクトル演算などは一切不要で四則演算のみでOKなので難易度はかなり下がります。 これがそのサンプルプログラムです。
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
このプログラムではスライドパッドでカメラ位置を上下左右に動かし、Aボタンでモデルに近づき、Bボタンでモデルから離れます。 現在は立方体モデルのみですが、24行の頂点データ、25行のワイヤーのインデックスデータを書き換えれば自由なモデルを自由なカメラ位置で見ることができます。モデルの形式は私がmkIIで作ったポリゴン表示プログラムと同一なのでデータさえ差し替えれば複雑なモデルも表示可能です。 上記検索で見つかったページに他のモデルデータやモデルの作り方が書いてあります。
0そうだね
プレイ済み
返信[9]
親投稿
かたけ~ katakei05
ありがとうございます! さんこうにさせていただきます!
0そうだね
プレイ済み