主にゲームプログラミングに関する備忘録です。

やあ (´・ω・`) ようこそ、Effekseerの世界へ、このテキストはサービスなのでまずは落ち着いて読んでほしい。
注意点は、このテキストはVisualStudio2017向けに作っているということだ。

ライセンス

EffekseerのライセンスはMITライセンスですね。まぁ、MITライセンスについては各自調べてほしいんですけど、
http://ja.wikipedia.org/wiki/MIT_License
基本的にフリーで、改変も自由。商用で使ってもOKだし、ソースコードを公開する必要もない。
ただし、これを使用しているソフトウェアは、ソフトウェアの重要な部分に明記しなければならない。つまり、これでゲームを作ったならば、タイトル画面だか、スタッフロール画面あたりに

Effekseer Copyright (c) 2011 S.Sawada

とか書いておく必要があるということですね。

Effekseerでエフェクト作り

まず、このページからダウンロードしてBinの中のEffekseer.exeを起動すると

こんなツールが起動しますので、楽しくエフェクトを作ってください。

Effekseer組み込み

周りの連中が「Effekseer組み込んでもエフェクトでない」「そもそもビルドが通らない」とかノタマウので、そろそろひとこと言っておこうか。

DxLibにて

はぢめに
どうやらDxLibに組み込めないとか、組み込んでもうまくいかないっていう人の殆どがDxLibとの組み合わせでうまくいってないっぽい。
現在のEffekseerはDxLib対応ライブラリが用意されてるので、つべこべ言わずにそれを落としてきましょう。
https://effekseer.github.io/jp/download.html
のページの下部にある「Effekseer For DXライブラリ」をダウンロードしよう。

そして解凍する。解凍したら中にSampleというフォルダがあると思うので、Sample_VS2017.slnをダブルクリックして起動しましょう。

んで、そのままビルドしても通らないこともあるかもしれないが。「Effekseerを使おう」という気概のある君なら、この程度の環境設定くらいは目をつぶっていてもできると思うんだ……。

ここまでやってもまだビルドが通らない場合、DxLibそのものが見える位置に来ていないことがある。ここは自分で調べて対処してくれ。これすら対応できないならEffekseerを使うのは諦めたほうがいいだろう。

サンプルを起動するとまずコマンドプロンプトが立ち上がると思いますので、そこは2を入力してエンターを押そう。そうすれば…

画面にこのようにエフェクトが表示されるはず。こうなっていなければ環境設定のどこかが間違っていると思います。うまくいかない人はコメント欄にでも状況を書いてください。分かる場合は返答します。
エフェクトがマッタク表示されない
…たまに、僕の周りに、表示されないからといってEffekseerやDxLibのバグだとかいう人もいるが、んなこたーない。普通に組み込めば普通に作ることができる。
  • efkファイルの読み込みに失敗
多分Effekseerがどうとか言う以前に、普通にファイルの読み込みができてないんだろう。とやかく言う前に勉強して下さい。
  • テクスチャの読み込みに失敗
    • たしかにこれはわかりづらい…ので解説しておくと、Effekseerから出力されたバイナリデータ(efk)をバイナリエディタで開いてもらうと分かると思うけど、パスが書いてあると思います。これがefkprojからの相対パスになっており、これは実行ファイルからの相対パスにもなっている。つまり、Effekseerで作業するときに、それを意識できていないと、このバグに陥りやすい。
    • 対処法:efkprojで作業する際に、efkprojと同じ階層にTextureフォルダでも作って、その中にテクスチャを放り込んでおく。その上で、efkファイルを出力したフォルダにTextureフォルダをコピーしておく。そうすれば実行時にはefkのパスとTextureを合成してテクスチャファイルを見に行く事ができる。
ファイル読み込めてるはずなのに…見えない。もしくは見える場所がおかしい
上の対処をきっちりやっているはずなのに見えないって場合は、ちょっと数学を勉強した方がいい。特に行列について、もっと言うとカメラ行列(ビュー行列)とか射影行列とかについて勉強しよう。
さすがにこの辺りは3Dプログラミングをする上で避けて通れないからね。とはいえ、全然勉強したことがない人は時間かかるはずだからポイントだけ書いておく
  • 原因:DxLibのカメラとEffekseerのカメラが別んとこ向いてる&座標系が逆向いてる(右手系と左手系)
多分、あのサンプルをそのまま使って「見えない」って言ってるんだろうけど、あのサンプルはあくまでも「使う」までの段階を用意しているだけだろう。サンプルなんだしそれでもいいんじゃないかなと思うが、初心者は多分ここで苦しむんだろうね。
いい機会だから「サンプルはサンプルで君の状況に対応する答えではない」っていうことを覚えておこう。
    • カメラってのは行列で表現される
モデルとかエフェクトとかが画面上に表示されるまでの座標変換のプロセスを大雑把に書くと
ローカル座標→ワールド座標→カメラ座標系→スクリーン座標系
てな感じになっている。今回のミソは、このワールド→カメラの変換だ。要はカメラを中心とした座標系へと変換するんだけど、それはカメラの位置および向いている方向によって変わる。これはわかるよね?
で、こいつが、3Dプログラミングでは行列(MATRIX)で表されているわけ。

つまるところこの行列が食い違っているために見えるはずのものが見えなかったり、変な位置に表示されるという状態になるわけだ。
      • ついでに言うと射影行列と座標系もですよね〜
射影行列と言って、画角とかそういうのによって、遠くの物をどれくらい小さくするのかの尺度も行列で表されている。もちろんこいつも合わせないと、おかしな表示になる。
また、デフォルトではEffekseerの座標系は右手系で、DxLibの座標系が左手系なので、この「系の違い」によって、表示に違いが出てしまっているはず。
  • 対処:Effekseer側のビュー行列、射影行列、系をDxLibに合わせてやる。
    • まず手っ取り早いのは系ね
マネージャ->SetCoordinateSystem(Effekseer::COORDINATE_SYSTEM_LH);//左手系にしちゃる。
これで終わり
    • 次に、ビュー行列と射影行列をいっぺんにやっちゃう。
      • DxLibからビュー行列と射影行列を取ってくる
MATRIX viewMat = DxLib::GetCameraViewMatrix();//ビュー行列取ってくる
MATRIX projMat = DxLib::GetCameraProjectionMatrix();//射影行列取ってくる
これで取ってこれる。こいつをコピーするんだが
      • Effekseerに行列をセットする
レンダラ->SetProjectionMatrix(射影行列);
レンダラ->SetCameraMatrix(ビュー行列);
で、それぞれの行列をセットできるんだが、残念ながら型が違うんやね
      • DxLibの行列をEffekseerの行列にコピー
エフェクシアの行列はEffekseer::Matrix44って型
DxLibのはMATRIXって型
中身がちゃいますので、愚直にコピーします。memcpyでもいいんだろうけど、行列コピってるって意味合いを強調するためにダブルループでやっちゃいます。
void EffekseerSyncronizeDxLib(){
  MATRIX viewMat = DxLib::GetCameraViewMatrix();//ビュー行列取ってくる
  MATRIX projMat = DxLib::GetCameraProjectionMatrix();//射影行列取ってくる
  Effekseer::Matrix44 efViewMat;
  Effekseer::Matrix44 efProjMat;
  for(int j=0;j<4;++j){
    for(int i=0;i<4;++i){
      efViewMat[j][i]=viewMat[j][i];
      efProjMat[j][i]=projMat[j][i];
    }
  } 
  レンダラ->SetProjectionMatrix(efProjMat);
  レンダラ->SetCameraMatrix(efViewMat);
}
こんな感じかな。
こんなかんじの関数を、DxLib側のカメラが動くたびにやっちゃやいいんだね。

このページへのコメント

ごめんね

1
Posted by 管理人 2015年05月07日(木) 16:41:46 返信

最後 efViewMat と efProjMat 逆ぅ

コピらせてもらった結果小一時間悩んだ

1
Posted by a 2014年08月06日(水) 19:04:20 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニューサンプル1

メニューサンプル2

開くメニュー

閉じるメニュー

  • アイテム
  • アイテム
  • アイテム
【メニュー編集】

管理人/副管理人のみ編集できます