- 1 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 13:20:15 ID:huEdz+FG]
- HSPで3Dゲームを作る人のためのスレ。
マターリマターリ ■過去スレ 【HSP】HSPで3Dゲーム【3D】 pc11.2ch.net/test/read.cgi/gamedev/1016699230/ 【HSP】HSPで3Dゲーム 2 【3D】 pc11.2ch.net/test/read.cgi/gamedev/1181967317/ 【HSP】HSPで3Dゲーム 3 【3D】 pc11.2ch.net/test/read.cgi/gamedev/1210197298/ ■makimo.to ttp://makimo.to:8000/cgi-bin/search/search.cgi?q=HSP+3D&sf=2&all=on&view=table
- 521 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 07:19:53 ID:9SU+bQeY]
- 床の法線は取得できるのね
なら床の法線ベクトルをN=(nx,ny,nz)、キャラの向いてる方向ベクトルをP=(px,py,0)としてNとPの内積を使ったらどう? 具体的には係数kを使ってキャラの速度を speed -= k*(nx*px+ny*py) といった感じに変更する ちなみに k=speed だったら、90度の上り坂で速度0、90度の下り坂で速度2倍、 平坦な場所で速度1倍って具合になるよ ゲーム制作頑張ってね
- 522 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 07:25:09 ID:9SU+bQeY]
- ごめん、
speed += k*(nx*px+ny*py) だったw
- 523 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 17:16:27 ID:NNQCfoFm]
- >>521-522
(1)普通は、y座標を高さにする。 (2)spped += k * (内積)だと、 内積が0になる90度では、speed += 0 で、キャラの速度はspeedになるはず。 つまり、キャラの速度は0にならず、地面にめり込む。
- 524 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 17:25:49 ID:NNQCfoFm]
- あ、失礼(2)は違う。
- 525 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 18:20:45 ID:9SU+bQeY]
- 法線との内積だから上手くいくはずだぞ、
ちなみに地面の角度に沿って移動するのを前提とした話であって めり込むとかそういうのは別問題 あとHGIMGは左手系だったのね、使ったこと無いから右手系だと勝手に思い込んでたわ だったらP=(px,0,pz)に変えて speed += k*(nx*px+nz*pz) とすればおk
- 526 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 18:29:31 ID:NNQCfoFm]
- k = speed
じゃないとき、跳ね返りがおかしくなったりしない?
- 527 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 19:19:02 ID:Ox+sZxyo]
- ttp://homepage3.nifty.com/ghpk/e3d/e3d3p001.htm
E3D用だけど、モジュールだから中見れば式ぐらいは出てくる。
- 528 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 19:57:35 ID:9SU+bQeY]
- >>525
ものすごい勘違いしてそうだから書くけど、speedってのはキャラの速さのことだ さっきも言ったが向きは別で求めてくれ 515を見る限り地面に沿った移動は出来るんだと思うけど、一応言っておくと P-(P・N)N = ( px-nx*(px*nx+pz*nz), py-ny*(px*nx+pz*nz), pz-nz*(px*nx+pz*nz) ) で地面に沿った向きが出せる あとはこれを正規化してspeedをかければおk 今まで言ったのをまとめて全部書くと speed = 10.0 ;平地でのキャラの移動の速さ k = 10.0 ;坂での減速係数 pvx = px-nx*(px*nx+pz*nz) ;キャラの移動方向ベクトルを計算 pvy = py-ny*(px*nx+pz*nz) pvz = pz-nz*(px*nx+pz*nz) nrm = pvx*pvx+pvy*pvy+pvz*pvz pvx/=nrm : pvy/=nrm : pvz/=nrm ;正規化 speed += k*(nx*px+ny*py) ;坂で減速 pvx*=speed : pvy*=speed : pvz*=speed ;移動速度決定 法線ベクトルNと、キャラの向きベクトルPは自分でゲットしてね ついでに実際には地面の角度が変わる境界でもうちょっと工夫すべきところがあるけどそこはもう勘弁 我ながらお人よし過ぎるぜw
- 529 名前:528 mailto:sage [2009/09/09(水) 20:08:22 ID:9SU+bQeY]
- やべ、自分で自分のレスにアンカーしちまった・・・
ごめん。寝不足なんだよ・・・ >>525じゃなくて>>526ってことで 式もどっか間違えてるかもしれないけど、そのときは誰か直してくれ
- 530 名前:名前は開発中のものです。 mailto:sage [2009/09/09(水) 21:04:31 ID:NNQCfoFm]
- 地面の法線ベクトルと、キャラの向きのベクトルのなす角度が180度のとき、
内積は−1 speed += k * -1 だから、k = speedなら、sppedは0になるが、 k != speedなら、ふっとばされるか、よじ登ってしまうってことを言ったのさ。
- 531 名前:528 mailto:sage [2009/09/09(水) 21:55:24 ID:9SU+bQeY]
- なるほどそういう事を言ってたのか
俺の例えが悪かったんだな。すまん。90度ってのは分かりやすいから一例として挙げただけであって、 俺が書いたコードは坂での減速のためだから、実際はそんな急な坂というか壁は想定してないし、 壁か地面かの判定はまた別でやってくれ・・・ 係数もゲームに丁度合ってそうなのを自分で探してちょ そもそも地面も壁も天井も全部オールインワンで処理したいんだったら、さっき言ったみたいな非現実的な方法なんて使わないで 摩擦と重力を考慮して物理的にちゃんと計算すべき。でも流石にそこまでは面倒見切れないだろ
|

|