トップページ > 過去ログ > 記事閲覧
SetCameraPosition...関数等の初期化方法
名前:レッドリ 日時: 2010/06/03 23:04

こんにちは、私はVC++2008EEとDXライブラリ、WinXPでプログラムをしています。 ・SetCameraPositionAndTarget_UpVecY ・SetCameraPositionAndTargetAndUpVec この二つを使って3Dの背景を描画したゲームを作っています。 1ステージでこれらの関数を使い、2ステージでこれらの関数を使わなかった場合、 背景が1ステージで設定したカメラ視点になってしまいます。 1ステージでは -------------------------------------------------------------------- SetCameraPositionAndTarget_UpVecY( VGet( 320.0f, 240.0f , 0.0f )), VGet( 320.0f, 150.0f , 0.0f ) ) ; SetCameraPositionAndTargetAndUpVec( VGet( 320.0f, 240.0f , 0.0f ) ), VGet( 320.0f , 150.0f , 100.0f ) , VGet( sin( camera.roll_sin_value ), cos( 0.0f ), 0.0f ) ) ; -------------------------------------------------------------------- という設定をしていて、2ステージでは何も設定していないという状態です。 デフォルトの設定はリファレンスによれば x = 320.0f, y = 240.0f, z = ( 画面のサイズによって変化 )、 注視点の位置は x = 320.0f, y = 240.0f, z = 1.0f、 カメラの上方向は x = 0.0f, y = 1.0f, z = 0.0f、 とあったので、 1ステージ終了後、 -------------------------------------------------------------------- SetCameraPositionAndTarget_UpVecY( VGet( 320.0f, 240.0f , 0.0f ) ) , VGet( 320.0f, 240.0f , 1.0f ) ) ; SetCameraPositionAndTargetAndUpVec( VGet( 320.0f, 240.0f , 1.0f ) ), VGet( 320.0f , 240.0f , 1.0f ) , VGet( sin( 0.0f ), cos( 1.0f ), 0.0f ) ) ; -------------------------------------------------------------------- と初期化を行って2ステージに遷移させましたが、 カメラの視点がおかしくなり、 この関数で初期化していない時と 2ステージの画面の見え方が異なりました。 上記二つを初期化する方法はあるのでしょうか? 説明が足りなかった場合は追加致します。 どうかよろしくお願いいたします。

Page: 1 |

Re: SetCameraPosition...関数等の初期化方法 ( No.1 )
名前:いっち 日時:2010/06/04 00:27

確認なのですが、カメラの設定を1度も変えずにステージ2を開始した場合は 期待通りの描画結果を得られているのでしょうか? SetCameraPositionAndTarget_UpVecY と SetCameraPositionAndTargetAndUpVec の2つの関数の違いは カメラの上方向をマニュアルで設定するかどうかだけのはずなので、どちらか片方だけで良いと思います。
Re: SetCameraPosition...関数等の初期化方法 ( No.2 )
名前:レッドリ 日時:2010/06/04 11:50

>確認なのですが、カメラの設定を1度も変えずにステージ2を開始した場合は 期待通りの描画結果を得られているのでしょうか? はい、テストプレイで、2ステージから開始させると大丈夫でした。 どういう風に見えているかと言うと ----------------------------------------------- 1ステージ……y座標を上げて、地面を見下ろす視点 2ステージ……画面の消失点にまっすぐ向いている視点 ----------------------------------------------- >SetCameraPositionAndTarget_UpVecY と SetCameraPositionAndTargetAndUpVec の2つの関数の違いは カメラの上方向をマニュアルで設定するかどうかだけのはずなので、どちらか片方だけで良いと思います。 そうなんですか。 SetCameraPositionAndTargetAndUpVec 私のゲームにはどうやらこちらが必要そうなのでこちらだけ使っていこうと思います。 すみません、一番肝心なゲームのジャンルを言ってませんでした。 私のゲームは2Dシューティングで背景だけ3Dというものです。
Re: SetCameraPosition...関数等の初期化方法 ( No.3 )
名前:いっち 日時:2010/06/04 19:23

カメラの初期値がどの様なものかわからないのですが、 情報を初期化するのであれば > SetDrawScreen( GetActiveGraph( ) ); とすると、初期化されるのではないかと思います。 (ただし、カメラ以外の情報も初期化されるかもしれません) > SetCameraPositionAndTargetAndUpVec( > VGet( 320.0f, 240.0f , 1.0f ) ), > VGet( 320.0f , 240.0f , 1.0f ) , > VGet( sin( 0.0f ), cos( 1.0f ), 0.0f ) ) ; これだと、カメラの座標と視点が一致してしまうので、 問題があるのではないでしょうか? ※追記 SetDrawScreen に GetActiveGraph の戻り値を渡したときに、 カメラの初期化が行われることを期待していますが、 この動作は現状たまたまこうなっているだけだと思います。 ステージ2のオブジェクトをデフォルトのカメラ位置に合わせて配置しているようですが、 ステージ2のカメラ位置も任意で設定し、それに合わせてオブジェクトを配置するように変更なさったほうが良いかもしれません もう1つの方法としては以下のように直接ビュー行列の保存/再設定を行う方法があります。 > MATRIX mat = GetCameraViewMatrix( ); // DxLib_Init後に保存 > // ステージ1用にカメラを設定 > // ・・・ ステージ1 ・・・ > SetCameraViewMatrix( mat ); // ステージ2の前で再設定 ただ、これで完全に初期状態に戻るのかどうかはちょっと自信がありません。
Re: SetCameraPosition...関数等の初期化方法 ( No.4 )
名前:レッドリ(解決) 日時:2010/06/05 08:55

> VGet( 320.0f, 240.0f , 1.0f ) ), > VGet( 320.0f , 240.0f , 1.0f ) , 確かにこれはおかしいですね…。カメラと視点が同じだとバグにも繋がりそうです。 気をつけなければならないチェックリストに入れておきます。 > SetDrawScreen( GetActiveGraph( ) ); ありがとうございます。 こちらでカメラの視点がデフォルトに初期化されました。 さらに、上記をコメントアウトしてから > MATRIX mat = GetCameraViewMatrix( ); // DxLib_Init後に保存 > // ステージ1用にカメラを設定 > // ・・・ ステージ1 ・・・ > SetCameraViewMatrix( mat ); // ステージ2の前で再設定 こちらだけの方法でも行いました。 しっかり、初期化されておりました。 このバグでずっと困っていたので いっちさんには本当に感謝しています。 これからはもっと3D関数を研究してプログラムを作っていこうと思います。 いっちさん、この度は本当にありがとうございます。

Page: 1 |