こんにちわ。C言語とDXライブラリとEffekseerと用いてTPSのゲームの製作をしているものです。
先日も以下のようなトピックで投稿させていただきましたが、
その中で、もう少し問題点がはっきりしてから再度質問させて頂く旨の意志を提示させて頂いてました。
Effekseerについて
http://dixq.net/forum/viewtopic.php?f=3&t=13226#p106016
問題点の本質としては、"エフェクトがうまく再生されない"ということです。
元のトピックでは[解決!]がついてしまっているので、結構スルーされてしまっているのではないかと不安になったので、
問題点がはっきりしたこともあり、新トピックを投稿させていただきました。
すみませんが、上記トピックのNo8~No11の現象につきまして、
なにかわかっていることがございましたら、ご一報お願い申し上げます。
DXライブラリとEffekseerの親和性について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: DXライブラリとEffekseerの親和性について
こういうのは大体、DXライブラリとEffekseerでレンダリング ステートの設定やカメラのニア・ファークリップ、Zバッファの扱いが違っていることに起因すると思います。
「レンダリング ステート (Direct3D 9)」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
調べる方法は地道な方法しかないですね。
「レンダリング ステート (Direct3D 9)」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
調べる方法は地道な方法しかないですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DXライブラリとEffekseerの親和性について
ありがとうございます。
そんな感じですよね。どこかが非同期なんでしょう…(´・ω・`)
とりあえず、その辺りを中心に捜査してみます。回答ありがとうございました。
そんな感じですよね。どこかが非同期なんでしょう…(´・ω・`)
とりあえず、その辺りを中心に捜査してみます。回答ありがとうございました。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: DXライブラリとEffekseerの親和性について
基本的はお互いに自動で戻らないと思うので、毎フレームの描画時にDXライブラリとEffekseerでそれぞれ設定してやれば完璧かと思います。
レンダーステートのバックアップ関数とかあると便利なのですが、DXライブラリに有ったかなぁ?
レンダーステートのバックアップ関数とかあると便利なのですが、DXライブラリに有ったかなぁ?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DXライブラリとEffekseerの親和性について
解決しました。
いろいろ修正した結果なのですが、
一番大きなミスがeffekseerの付属ヘルプに記載されていた、
(以下、EffekseerのHelp引用)
"気を付けない点としては、Effekseerの描画はDXライブラリの仕様により、何らかの半透明の画像、もしくはそれに準ずる何かを描画した後でないと有効になりません。ゲーム中に組み込む場合は余程のことがない限り、問題にならないと思いますが、サンプルのような短いコードの場合は先に何かを描画します。 "
を忘れていたことです。
以上のように何かを描画することで正常に動作をしました。
逆に、先になにか半透明のものを描画しないとそういう現象が発生すると思ってください。
以上、結果報告まで!
いろいろ修正した結果なのですが、
一番大きなミスがeffekseerの付属ヘルプに記載されていた、
(以下、EffekseerのHelp引用)
"気を付けない点としては、Effekseerの描画はDXライブラリの仕様により、何らかの半透明の画像、もしくはそれに準ずる何かを描画した後でないと有効になりません。ゲーム中に組み込む場合は余程のことがない限り、問題にならないと思いますが、サンプルのような短いコードの場合は先に何かを描画します。 "
を忘れていたことです。
// エフェクトの描画
void DrawBEffect(void){
// 情報取得
GRAPHHANDLE Handle=GetAllHandle();
// なんか描画する
SetDrawBlendMode(DX_BLENDMODE_ALPHA,0);
DrawGraph(0, 0, Handle.MapE.Graph, TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
// 頂点バッファに溜まった頂点データを吐き出す
RenderVertex();
// エフェクトの更新処理を行う
BManager->Update();
// エフェクトの描画開始処理
BRenderer->BeginRendering();
// エフェクトの描画
BManager->Draw();
// エフェクトの描画終了処理
BRenderer->EndRendering();
}
逆に、先になにか半透明のものを描画しないとそういう現象が発生すると思ってください。
以上、結果報告まで!