Effekseerについてです

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
トクナガ

Effekseerについてです

#1

投稿記事 by トクナガ » 11年前

なんとか調べながら
表示するとこまではいきました
ただ原点(0,0,0)においても王レイヤーについてきたりとおかしなことになります
また再生が終わるとステージのテスクチャのUVがずれるのもわけがわかりません
再生描画までいっているので読み込みはできていると思います

コード:

Effekseer::Matrix44 TranslateMatrix44(const Matrix& mat){

	Effekseer::Matrix44 ret;

	for (int i = 0; i < 4; i++){
		for (int j = 0; j < 4; j++){
			ret.Values[i][j] = mat.m[i][j];
		}
	}
	return ret;
}

Effekseer::Matrix43 TranslateMatrix43(const Matrix& mat){

	Effekseer::Matrix43 ret;

	for (int i = 0; i < 4; i++){
		for (int j = 0; j < 3; j++){
			ret.Value[i][j] = mat.m[i][j];
		}
	}
	return ret;
}

EffekseerTest::EffekseerTest()
{
	g_manager = NULL;
	g_renderer = NULL;
	g_handle = 0;
	g_effect = NULL;
}

EffekseerTest::~EffekseerTest()
{
	// エフェクトの破棄
	SAFE_RELEASE(g_effect);
	g_manager->Destroy();   // エフェクト管理用インスタンスを破棄
	g_renderer->Destory();  // 描画用インスタンスを破棄

}

void EffekseerTest::Init(const Vector3& cpos, const Vector3& ctarget)
{
	// 描画用インスタンスの生成
	g_renderer = ::EffekseerRendererDX9::Renderer::Create(iexSystem::GetDevice(), EFFECT_MAX);

	// エフェクト管理用インスタンスの生成
	g_manager = ::Effekseer::Manager::Create(EFFECT_MAX);

	// 描画用インスタンスから描画機能を設定
	g_manager->SetSpriteRenderer(g_renderer->CreateSpriteRenderer());
	g_manager->SetRibbonRenderer(g_renderer->CreateRibbonRenderer());
	g_manager->SetRingRenderer(g_renderer->CreateRingRenderer());
	g_manager->SetModelRenderer(g_renderer->CreateModelRenderer());

	// 描画用インスタンスからテクスチャの読込機能を設定
	//独自拡張可能、現在はファイルから読み込んでいる。
	g_manager->SetTextureLoader(g_renderer->CreateTextureLoader());
	g_manager->SetModelLoader(g_renderer->CreateModelLoader());
	g_manager->SetCoordinateSystem(::Effekseer::COORDINATE_SYSTEM_LH);

	// エフェクトの読込
	g_effect = Effekseer::Effect::Create(g_manager, (const EFK_CHAR*)L"DATA\\test.efk");


	// 投影行列を設定
	g_renderer->SetProjectionMatrix(
		::Effekseer::Matrix44().PerspectiveFovRH(90.0f / 180.0f * 3.14f,(float)iexSystem::ScreenWidth / (float)iexSystem::ScreenHeight, 1.0f, 500.0f));

	g_handle = g_manager->Play(g_effect, 0.0f, 0.0f, 0.0f);

	// エフェクトの調整
	g_manager->SetLocation(g_handle, 0.0f, 0.0f, 0.0f);//位置
	g_manager->SetRotation(g_handle, Effekseer::Vector3D(0.0f, 0.0f, 0.0f), 0.0f);//回転
	g_manager->SetScale(g_handle, 1, 1, 1);//倍率


}

void EffekseerTest::Regist(int BulletID, int BEID)
{
	g_manager->StopEffect(g_handle);
}

void EffekseerTest::Update(const Vector3& cpos, const Vector3& ctarget)
{

	// カメラ行列を設定
	g_renderer->SetCameraMatrix(
		::Effekseer::Matrix44().LookAtRH(::Effekseer::Vector3D(cpos.x, cpos.y, cpos.z), ::Effekseer::Vector3D(ctarget.x, ctarget.y, ctarget.z), ::Effekseer::Vector3D(0.0f, 1.0f, 0.0f)));

	//更新
	g_manager->Update();            // 更新処理
}

void EffekseerTest::Render()
{
	g_renderer->BeginRendering();						// 描画開始処理
	g_manager->DrawHandle(g_handle);				// 描画
	g_renderer->EndRendering();							// 描画終了
}

これがEffekseerクラスになります
自分の勉強不足もあるんですが
// 投影行列を設定
g_renderer->SetProjectionMatrix(
::Effekseer::Matrix44().PerspectiveFovRH(90.0f / 180.0f * 3.14f,(float)iexSystem::ScreenWidth / (float)iexSystem::ScreenHeight, 1.0f, 500.0f));
の引数がいまいち何をやっているのかわかりません
おそらくはカメラの設定などがうまくいってないと思うんですが
わかる方いましたらお願いしたします

顔芸

Re: Effekseerについてです

#2

投稿記事 by 顔芸 » 11年前

g_renderer->SetProjectionMatrix(
::Effekseer::Matrix44().PerspectiveFovRH(90.0f / 180.0f * 3.14f,(float)iexSystem::ScreenWidth / (float)iexSystem::ScreenHeight, 1.0f, 500.0f));
の引数がいまいち何をやっているのかわかりません
この関数に限らず,関数リファレンスならダウンロードしてきたEffekseerのフォルダの中に
htmlが入っているのでそれを確認すればいいですよ.

PerspectiveFovRH関数は射影行列を得るための関数ですね.これは右手座標系のためのもので,
左手座標系のためにPerspectiveFovLHという関数もあります.

引数は頭から順に視野角,アスペクト比,Nearクリップ値,Farクリップ値となっています.
言葉の意味はご自身で調べていただけたらと思います.

第一引数はラジアン指定なので,90°に π / 180 を掛けてラジアンに変換しているだけです.
第二引数は画面の幅 / 高さでアスペクト比を求めています.
第三,第四引数はNearクリップ値,Farクリップ値を直打ちしていますね.

自分もつい昨日ここで質問させていただき,EffekseerとDXライブラリの連携に成功したところなので,
よろしければ自分のトピも参考にしていただければ良いと思います.自分の場合はDXライブラリ側の
射影行列をEffekseer側の射影行列にコピーして動かしたので,最終的にPerspectiveFovRH関数は
使っていなかったりします.その辺りはご自身の開発環境と相談してうまく実装してください.

参考までに↓
http://dixq.net/forum/viewtopic.php?f=3&t=15506

閉鎖

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