ページ 11

DXライブラリとEffekseerの親和性について

Posted: 2013年6月11日(火) 15:26
by Priest
こんにちわ。C言語とDXライブラリとEffekseerと用いてTPSのゲームの製作をしているものです。
先日も以下のようなトピックで投稿させていただきましたが、
その中で、もう少し問題点がはっきりしてから再度質問させて頂く旨の意志を提示させて頂いてました。

Effekseerについて
http://dixq.net/forum/viewtopic.php?f=3&t=13226#p106016

問題点の本質としては、"エフェクトがうまく再生されない"ということです。
元のトピックでは[解決!]がついてしまっているので、結構スルーされてしまっているのではないかと不安になったので、
問題点がはっきりしたこともあり、新トピックを投稿させていただきました。

すみませんが、上記トピックのNo8~No11の現象につきまして、
なにかわかっていることがございましたら、ご一報お願い申し上げます。

Re: DXライブラリとEffekseerの親和性について

Posted: 2013年6月11日(火) 16:27
by softya(ソフト屋)
こういうのは大体、DXライブラリとEffekseerでレンダリング ステートの設定やカメラのニア・ファークリップ、Zバッファの扱いが違っていることに起因すると思います。
「レンダリング ステート (Direct3D 9)」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
調べる方法は地道な方法しかないですね。

Re: DXライブラリとEffekseerの親和性について

Posted: 2013年6月11日(火) 16:32
by Priest
ありがとうございます。

そんな感じですよね。どこかが非同期なんでしょう…(´・ω・`)

とりあえず、その辺りを中心に捜査してみます。回答ありがとうございました。

Re: DXライブラリとEffekseerの親和性について

Posted: 2013年6月11日(火) 16:34
by softya(ソフト屋)
基本的はお互いに自動で戻らないと思うので、毎フレームの描画時にDXライブラリとEffekseerでそれぞれ設定してやれば完璧かと思います。
レンダーステートのバックアップ関数とかあると便利なのですが、DXライブラリに有ったかなぁ?

Re: DXライブラリとEffekseerの親和性について

Posted: 2013年6月16日(日) 11:38
by Priest
解決しました。

いろいろ修正した結果なのですが、
一番大きなミスが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();
}
以上のように何かを描画することで正常に動作をしました。
逆に、先になにか半透明のものを描画しないとそういう現象が発生すると思ってください。

以上、結果報告まで!