Top > EasyFAQ > 120
HTML convert time to 0.005 sec.


EasyFAQ/120

Last-modified: 2010-01-14 (木) 18:05:00

地面用モデルデータについて Edit

投稿者TS
重要度
edit/refer
状態
edit/refer
カテゴリ
edit/refer
HSPバージョン
E3Dバージョン
回答
edit/refer

ここから下を自由に編集してください。
上の投稿情報は安易に編集するとFAQリストのリストアップに支障が出るものもあります。
よく分からない方は分かる人に聞いてみてください。

  • 横スクロールのアクションゲームを作ろうと思ってるんですが、http://www.eonet.ne.jp/~thada/imgLIB/q1.jpgのような地面用データは使えますかね?一度テストしてみたんですが衝突をするや否や何故かある1点に移動してしまうんですよ。
    もう一つ、http://www.eonet.ne.jp/~thada/imgLIB/q2.pngのように斜めの地面に衝突した物体が地面に平行な方向に向きを変えるような命令を組みたいのですが、クオタニオンから方向ベクトル、方向ベクトルからクオタニオンにという操作はどのようにすれば可能でしょうか。

ご教授していただけたら幸いです。

*追記
 qid(v)→vec(v)の操作は必要ないですね。

  • こんにちは。1枚目の画像は特に問題ないと思いますよ。
    おそらくパックマンのような球体状のキャラクターなんでしょうね。
    球体の中心にローカル座標原点を置いているので、当たり判定用モデルが半径分浮いていると言う事なのでしょう。
    で、2枚目の画像を見てちょっと気になったんですが、この横スクロールはXY面を移動しているのでしょうか?ひょっとしたらZY面移動でしょうか?
    画像右側に”Z軸負方向”という言葉があるようですが、E3DChkConfGroundで得られたX座標値(0.0のはず)をZ座標に流し込んでいませんか?
    だとしたら地形に接触した瞬間にZ座標0.0に飛んでしまうはずです。
    普通はXY面で動かしZ値は忘れる場合が多いようです。もともとの2Dゲームが画面のXY値をそのまま使っていたからでしょうね。ココではXY面移動として話を進めさせてもらいます。
    2枚目の画像については、法線ベクトルが鉛直方向から何度傾いているかがわかればいいんですよね。
    Cosで出るのではないでしょうか?
    3D空間なら2回重ねる必要があるでしょうけど、幸いここでは2Dスタイルなので1回でいいはずです。
    その角度E3DRotateQLocalZすればX座標がVec(a)の長さになっているはずです。
    その座標をもう一度E3DRotateQLocalZする事でVec(a)のXY座標になるのではないでしょうか?
    あ、私は数学苦手協会永世名誉会長と呼ばれるほどの数学苦手人間なので、ひどくトンチンカンな事を言っているかも知れません。その時は笑ってやって下さいませ。ではー。 -- スイートポテト? 2010-01-14 (木) 09:46:33
  • 図の描き方が雑でしたね。
    http://www.eonet.ne.jp/~thada/imgLIB/q3.png
    上図が現段階で実現したいことです。
    仰る通りキャラクターはXY平面上を動きます。
    E3DChkConfGroundで地面に対する法線ベクトルnが出力(される?)のを利用します。まずZ軸方向の適当なベクトルfを出してやり、fとnの外積計算から出たベクトル(fとnで表される平面に垂直なベクトル)を出してキャラクターの向きを出そうという考えです。そのベクトルをどうキャラクタの向きに適応できるかで悩んでます。

―スイートポテトさん
三角関数のテがありましたね!なるほど参考になりました
修正座標の出力先のミスは無いです。
私も数学はあまり出来ないのでこの考え方には語弊があるとは思いますが、ご指摘いただければうれしいです。

TS

  • 地面の上に乗っかってる判定用のモデルは、描写する必要はないけど判定の情報を更新するためにe3dchkinviewを呼ぶ必要がある。地面に対して向きをそろえるコードはサンプルの中に入ってる。e3dhsp3_GroundNormal.hspを見るアル -- ORZ? 2010-01-14 (木) 11:22:51
  • なるほど。2Dスタイルで必ず横を向いてるわけだから、外積で姿勢をコントロールできると言うお話だったんですね。勝手に「坂の角度に応じて減速するように運動エネルギーを分解する話だ」と思い込んでしまいました。お恥ずかしいです。ワハハ。自分で笑っておきますので見逃してやってくださいね。 -- スイートポテト? 2010-01-14 (木) 13:05:54
  • vec->qはE3DLookAtQ, q->vecはE3DMultQVecです。E3DLookAtQは互いに180度の関係にあるベクトルを渡すとうまく動かないことがあるので180度と分かっている場合にはRotateQ系の命令を使うかE3DSetQAxisAndDegを使ってください。 -- おちゃっこ? 2010-01-14 (木) 15:10:22
    >>ORZさん おかげ様で1歩前進することができました。ありがとうございます。
    >>スイートポテトさん 物理は好きですけど、プログラムに応用するとなるとかなりの技術を要するみたいなのでそこまで深入りはしないつもりです。速度の成分分解は恐らくやるとおもいますが・・・。
    おちゃっこさん>>E3DLookAtQとE3DMultQVecですね!やっと解決しそうですありがとうございます。 -- 2010-01-14 (木) 18:00:25

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White