« 思った座標にEffekseerのエフェクトを3D描画できるようになるまで1 | トップページ | 思った座標にEffekseerのエフェクトを3D描画できるようになるまで3(動画あり) »

2015.09.05

思った座標にEffekseerのエフェクトを3D描画できるようになるまで2

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

さて、なんでカメラ周りとかでハマっていたのか?
なんですが
初音ミク冒険記のデバッグ用機能が関係してます。

Photo_3

つまり、かげさんは開発時には
ゲーム本編の領域の外などにデバッグ情報を表示してるのです。

上と下を見比べると分かりますが、
実際には、ゲーム本編の領域サイズは、どちらも同じです。

下のかげさんの開発時の画面サイズだと背景の黒い部分が
画面中央になっています。

コレ、3Dカメラ関連では、どうなっているかというと
カメラの注視点座標が画面中央になるって考えた時に
デバッグしている画面サイズだと
カメラの注視点座標位置がゲーム本編の領域に含まれないんです・・・

なので、カメラの位置や注視点の補正が必要なんじゃない?
と思ったところから、迷走が始まりました・・・

ちなみに増分の横750とか縦350とかは
初音ミク冒険記のデバッグファイル設定画面で変更できます。
(設定後に起動すると有効になる)
Debugsetting20150905_01

かげさんは、カメラの注視点とかを
ゲーム本編の描画領域の真ん中辺りに持ってこないとダメだと思ってました。

だから、うまいこと、そうなるように座標を計算するようにしてのですが
全然ダメでした。

普通3Dのゲームってカメラの注視点の座標変わったとしても
画面の中央に来るようになっていますよね。
そう、注視点とかカメラの位置を動かしたからといって
画面中央を見ているというのは変わんないんです・・・

コレに気づかず、ずーっと変だなぁと思っていて
関連する4つの座標の何が正しいのかすら分からずにいました。

実は
8月の冒険記の進展を書いてみる
の記事を書いた段階では、あまりに分からないので保留にしようとしてました。

しかし、諦めたくなった時は、
大体、もうチョットだけ頑張ってみると
突破口が見えてきたりするもの。

これは過去の経験上、分かっていることです。
なので、もうちょっとだけ考えてみることにしました。

DXライブラリの3Dカメラ関連のリファレンスを見ると
DXライブラリを初期化した段階で
・カメラの位置
・カメラの注視点
・カメラの上方向
を設定しているように受け取れます。

上記の3要素、さらにモデルの位置の4つの座標を
一度に考えるのではなく、1つずつ考えていく。
「金田一少年の事件簿」でいうところの「困難の分割」です。

上記の3つはDXライブラリの初期値をそのまま使う
という前提で考えれば、
3Dモデルの座標だけを考えれば良いことになります。

さて、3Dの原点は、1つ前の記事で書いたように
画面の左下になっています。

x座標の性質は2D描画も3D描画も同じで
右に行くと値が増えて、左に行くと値が減ります。

考えやすくするため、
3Dの単位はピクセルで考えることにした場合、
x座標は、2Dの時と同じ位置と考えて良くなります。
y座標は、前回記事に書いたように
「画面の縦幅」-「2D描画で描画したいy座標」です。

「画面の縦幅」=
 「初音ミク冒険記のゲーム領域の縦幅(272)」+
 「ウィンドウサイズの縦幅増分(350)」
ということで座標は(272 + 350) - 2Dで描画したいy座標とします。

描画するモデルですがゲーム本編同様に
エナメルPの「ねんどろ風初音ミク」のMMDモデルにします。
(DXライブラリは、MMDモデルを読み込めるので)

早速やってみました。
Photo_4

3Dモデルが小さいのは、
モデルの拡大率を2にした関係で小さすぎるためです。

コレ自体は、Effekseer For DXライブラリのサンプルソースに
Effekseerで作成したエフェクトは2D表示の場合、小さすぎることが殆どなので必ず拡大する
というコメントがあったので気にしませんでした。

2Dのミクを左右に動かしたりジャンプしてみると・・・
おお! 3Dモデルのミクが追従してきます!

と思ったら、ある座標を境にして
急に3Dミクが横に離れていく動きをします。

うろちょろしていたら、背景無しだから気づかなかったけど
画面が横スクロールしている状態です。
1

Scrollkanren1

あれ?
ということは、DXライブラリのデフォルトのカメラ設定で
カメラ位置を2Dスクロールに合わせて移動したら
うまくいく?

と思ったけど、DXライブラリのリファレンスページ見ても
現在のカメラ座標とか取得する関数が無いから
2Dスクロールに合わせて補正とか出来ないじゃん!



待てよ、相手はDXライブラリだ。
隠し関数とかがあるかもしれん!

ということでDXライブラリのヘッダファイルで
3Dカメラ関連のところを見てみる。

うぉ! あるじゃねぇか!

GetCameraPosition(); // 3Dカメラの位置
GetCameraTarget(); // 3Dカメラの注視点
GetCameraUpVector(); // 3Dカメラの上方向

ということで、取得してみたら
3Dカメラのz座標って、この画面サイズだと-537で
注視点のz座標って、-538と1しか違わないんだな。

x座標とy座標は、
どちらもDXライブラリが作ったウィンドウの
画面中央と来たか・・・

どういうこと?
あ、いかん、いかん、
まずはモデル座標だけに集中、集中。

ということで、3Dカメラの位置と注視点の座標に
2Dスクロールの表示原点をVAddで加算してやることに。

すると、横スクロールはうまくいくようになったものの
縦スクロールがうまくいかない・・・

ここで1つ前の記事の
「3Dの原点座標が2Dの原点座標の位置になるように
 3Dカメラの描画位置を合わせた場合、
 y座標は、単純に符号を変えれば良い」
というのが効いてきます。

つまり、2Dスクロールの表示原点を絡める時は
x座標は加算、y座標は減算してやらないとダメってこと。

で、やってみたら、横スクロール、縦スクロールともにうまくいき
2Dミクの後ろに3Dミクが背後霊のように追従してきました!

念のため、ウィンドウサイズの増分を0とか他の値に下げて確認。
期待通りに追従してきます。

ということは、
エフェクト位置も3Dモデルと同じ考えでやってみたら・・・

よっしゃ!
うまくいきました!

が、次の問題が・・・

エフェクトの描画が2Dの時と同じで見栄えが悪いのです・・・
Photo_2

やっぱりカメラを調整しないとダメなのか・・・
ってことで、次の記事に続きます。


 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

トラックバック

この記事へのトラックバックの一覧です: 思った座標にEffekseerのエフェクトを3D描画できるようになるまで2:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。