FPSのようなカメラ移動

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ヒーはん

FPSのようなカメラ移動

#1

投稿記事 by ヒーはん » 15年前

3Dのアクションゲームを作っていて、
FPSのような、カメラ移動を実装したいのですが、
どの様にすればできるでしょうか?

ちなみに、DXライブラリを使用しています

Justy

Re:FPSのようなカメラ移動

#2

投稿記事 by Justy » 15年前

 DXライブラリ 3.xでのカメラは以下の関数を使います。

・ SetCameraPositionAndTargetAndUpVec
・ SetCameraPositionAndTarget_UpVecY
・ SetCameraPositionAndAngle
・ SetCameraViewMatrix

 よく使うのは多分 1番目か2番目でしょうか。

 2.x系だと
・ CreateLookAtMatrix / CreateLookAtMatrix2 / CreateLookAtMatrixRHなど + SetTransformToView

しかないようです。

 使い方はリファレンスに載っていますが、どれもカメラの姿勢をベクトルないしは行列で指定するタイプの
ものです。


 実装としては基本カメラは座標 [0, 0, 0]に固定(振動などオフセット的な移動は別)、して
マップやキャラクタの方を動かすのがいいでしょう。

 例えば前進するときは、マップ・キャラクタなどプレイヤー以外の全てのオブジェクトを
前から後ろに移動させます。
 そうすると見た目上前進しているように見ます。
 後退するときは反対に後ろから前に動かします。

 少し面倒ですがこうしないと、DXライブラリの内部計算は floatなので
広大なマップを移動して座標の値が大きくなりすぎた時細かい座標の表現に問題がでるからです。
 カメラが常に [0, 0, 0]付近であればまずその心配をしなくて済みます。
(勿論これは可視範囲内は問題が出ないだけで、見えない遠くの方ではおかしなことになっているでしょう)


 とはいえそんな広大なマップは使わないから floatの問題はおきない、ということであれば
カメラの方を動かしても構いません。
 その方が管理は楽ですから。


 こちらはカメラの方を動かしている公式サンプルです。

DXライブラリ置き場 迷路を3Dで表示
http://homepage2.nifty.com/natupaji/DxL ... meiro.html

ヒーはん

Re:FPSのようなカメラ移動

#3

投稿記事 by ヒーはん » 15年前

すいません、カメラそのものの動かし方ではなく、
マウスでFPSのようにカメラを動かす方法を教えて欲しいです。

通りすがり

Re:FPSのようなカメラ移動

#4

投稿記事 by 通りすがり » 15年前

とりあえず今どの程度FPSゲームが出来ているのか教えて下さい。
私たちにはヒーはんさんがどの程度のスキルを持っているのかが解りません。

ヒーはん

Re:FPSのようなカメラ移動

#5

投稿記事 by ヒーはん » 15年前

>どの程度FPSゲームが出来ているのか教えて下さい。
WSADで移動ができて、左クリックで弾が撃てるぐらいです。

5作品ほどゲームは作ったことがあります。

Justy

Re:FPSのようなカメラ移動

#6

投稿記事 by Justy » 15年前

>FPSのようにカメラを動かす
 回転の方、ということですか?

 あんまりFPSで遊ばないんで、どういう動きがベストなのかは知らないですけど、
大体こんなかんじってところでよければ。

 とりあえず、マウスの相対移動をもって回転させる、ということで。

 現在の画面上のマウスの位置 Mを、前のフレームでのマウスの位置を 0としたときに
画面幅・高さ分移動した場合が 1になるよう正規化します(NM)。
(この際 y軸の符号をどっちにするかはお好みで)

 例えば、前のフレームのマウスの位置が画面中央で、今が画面上部中央なら
NM[x, y] = [0, -0.5 (0.5)]といった感じです。
 
 その正規化された座標 NMと最大角速度 Rを掛けたらその値 (NMR)がそのフレームでの
カメラの回転量になりますので、今のカメラの XYZ軸の回転値に NMR[x]の方を、
カメラのY軸に、NMR[y]の方を X軸の方に足して、終わりです。

 カメラの管理が回転値でなく、ベクトルやら行列で管理されているなら、MMRを行列化して掛けて下さい。

ヒーはん

Re:FPSのようなカメラ移動

#7

投稿記事 by ヒーはん » 15年前

できました!!
みなさんのおかげです。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る