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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Priest
記事: 123
登録日時: 12年前
住所: 愛知

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

#1

投稿記事 by Priest » 12年前

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

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

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

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

コード:

#include <Priest.h>
int MyPolicy ( void ) { printf( "何事も楽しくね!" ); return 0; }

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 12年前

こういうのは大体、DXライブラリとEffekseerでレンダリング ステートの設定やカメラのニア・ファークリップ、Zバッファの扱いが違っていることに起因すると思います。
「レンダリング ステート (Direct3D 9)」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
調べる方法は地道な方法しかないですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Priest
記事: 123
登録日時: 12年前
住所: 愛知

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

#3

投稿記事 by Priest » 12年前

ありがとうございます。

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

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

コード:

#include <Priest.h>
int MyPolicy ( void ) { printf( "何事も楽しくね!" ); return 0; }

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 12年前

基本的はお互いに自動で戻らないと思うので、毎フレームの描画時にDXライブラリとEffekseerでそれぞれ設定してやれば完璧かと思います。
レンダーステートのバックアップ関数とかあると便利なのですが、DXライブラリに有ったかなぁ?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Priest
記事: 123
登録日時: 12年前
住所: 愛知

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

#5

投稿記事 by Priest » 12年前

解決しました。

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

以上、結果報告まで!

コード:

#include <Priest.h>
int MyPolicy ( void ) { printf( "何事も楽しくね!" ); return 0; }

閉鎖

“C言語何でも質問掲示板” へ戻る