C++3Dのゲームを作ろうと思っています。最後に球の半径分移動した分を引くという行列を適用させて作ってみました。これに敵などを追加させようとなるとかなりややこしくて難しくなる気がしますキャラは常にまっすぐたっている状態でいいのですが、敵などは球状の地形に合わせて体を回転させないといけません(地面に垂直に)そして一番の難関がゴツゴツなどの地形にすることですまずこれはゴツゴツの球を表示させること自体が自分的に難しいですメタセコイアでXファイルとしてつくるか、配列などで何とか表現してやるか配列で表現できたら後々楽できそうですけど自分では表現の仕方が思いつきませんでした。Xファイルで作った場合の地形との判定が、全てのポリゴンとの判定になると思うのですが処理的に重過ぎると思いました。6年前これマリオギャラクシーでも苦労したと聞いているので結構難しいと思います。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。これマリオギャラクシーでも苦労したと聞いているので結構難しいと思います。マリオギャラクシーに近いイメージですよね?マリオギャラクシーを先ほど確認したところ私のイメージどおりでしたやっぱり作るのって難しいんですねもう少しこの質問を続けてみて、いい意見がなければ、できるか分かりませんけど無理やり作ってみることにします。地形との判定についてはそれほど心配する必要はないんじゃないかと思います。DXライブラリでも実装されていますが、空間分割によって近くのポリゴンとだけ判定することができます。当たり判定は球の中心にレイを飛ばして当たり判定するって方法があります。これは地面にレイを飛ばして地形判定するって行為の応用です。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。地形との判定についてはそれほど心配する必要はないんじゃないかと思います。DXライブラリでも実装されていますが、空間分割によって近くのポリゴンとだけ判定することができます。いう手法があったんですね。当たり判定は球の中心にレイを飛ばして当たり判定するって方法があります。これは地面にレイを飛ばして地形判定するって行為の応用です。マリオギャラクシーの様に複数の球が相互作用しなかれば何とか成るかと思いますが、どうしょう?なるほど、とりあえず地形との当たり判定はできそうに感じました。全部ベクトルで計算してください。現在位置からの移動方向は、球体中心線に対して垂直なベクトルです。体が落ちる方向も球体中心へのベクトルです。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。完全に素人の意見なのであまり当てにしないでください。他にもっと素晴らしいやり方がたぶんあるんだろうということを考えたうえでこんなのはどうだろう?というのを挙げます。キャラクター毎に保持しているクォータニオンと半径で全キャラクターの位置と向きを決めるというやり方です。このやりかたはキャラクターは浮動小数点数5つで、向きも含めて一意に場所が決まります。(ただし必要に応じてx,y,z座標系も用います。こちらは上の5つから毎フレーム求めればいいと思います。)クォータニオンじゃなくて回転行列でも多分おんなじことができると思います。以下左手座標系で考えますが、概念的なものなのでどの座標系でもおよそ一緒だと思いますまず全キャラクターの配置ですが、x=0,y=0,z=0が球体の中心だとします1すべてのキャラクターをx=0,y=0,z=0,z正の方向にxy平面に垂直に立つように配置します。2各キャラクターが保持しているクォータニオンでそれぞれのキャラクターを回転させます3保持している半径分だけ中心から外に動かしますこれで球体上に一意にキャラクターが配置できると思います。キャラクターの頭の向きが分かってて、かつ大きさが1ならずらすのはそのベクトルにrをかけるだけです。(0,r,0)のベクトルにクォータニオンQを与えたものがその物体の現在位置(x,y,z)です。次に移動ですが1現在キャラクターが向いている方向ベクトル(x,y,z座標系)は、キャラクターの前方向のベクトル(0,0,1)にクォータニオンを与えることで得られると思います。2半径1の球体で速度aが出るようなキャラクターを半径rの位置で同じ速度で動かすのならば回転速度dθはdθ=a/rです。3回転軸vは、頭の方向ベクトルと、1で求めたベクトルとの外積を取れば得られます。q(v,dθ)を求めます。q(v',b)でいいかと多分ですけど、移動についてはどの方向に歩いても1週して元の位置に戻ってこれると思います。追尾のような簡単なものであれば1自分と相手との相対位置ベクトル(x,y,z座標系)を得る2頭の方向ベクトルを法線ベクトルにするような平面上へ写像する3自分の向きベクトルが2で得られたベクトルと同じ向きになるように回転角b以内で向き変更するで行けるんじゃないかと。(いけないかもしれません)目線が合うかどうかとか、地面との接触とかは、ふつうの3Dのやり方と一緒だと思います。結局はポリゴンと線分とが当たるかどうかということだと思うので。(その向きがy軸方向かそうでないかはあるにしろ)あとクォータニオンを使ったのは、その他動くものについてsquadが使えると思ったからです。つまるところクォータニオンならばスプライン曲線的なものが書けます。(実は最初に巡回とかどうするんだろう?と思って浮かんだのがこれだったのでクォータニオンを使いました。)ただしこれはあくまでも最初の仮定を成り立たせた場合です。大陸間弾道ミサイルみたいな3次元的な回転をするものはわかりません。(足が下向いてるという仮定をそれてるから)あとやっぱり僕が小一時間考えた程度では具体的な難所とかはやはり実際に作ったことがないのでよくわかりません。無責任ですがごめんなさい。ミクプラは自由にリンクできます。