-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Source: Animation Editor Effekseer with SFML example
Allyson S Bacon edited this page Mar 2, 2022
·
5 revisions
See the official website of Effekseer: https://effekseer.github.io/en/
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
#include <Effekseer.h>
#include <EffekseerRendererGL.h>
// Create a renderer of effects
// エフェクトのレンダラーの作成
static ::EffekseerRendererGL::RendererRef effekseer_renderer;
// Create a manager of effects
// エフェクトのマネージャーの作成
static ::Effekseer::ManagerRef effekseer_manager;
// EFK handler
static Effekseer::Handle effekseer_handle;
// Control animation loop
static int32_t effekseer_time = 0;
// EFK ef
static Effekseer::EffectRef effekseer_effect;
void main_loop()
{
sfml_start();
effekseer_start(800, 600);
while (true)
{
sf_clear()
sf_display()
}
}
void sfml_start()
{
sf::VideoMode desktop = sf::VideoMode::getDesktopMode();
window = new sf::RenderWindow(sf::VideoMode(800, 600, desktop.bitsPerPixel), sf::String("OpenGL"), sf::Style::Default, sf::ContextSettings(24, 8, 4, 0, 0));
window->setFramerateLimit(0);
}
void effekseer_start(int window_width, int window_height)
{
// Create a renderer of effects
// エフェクトのレンダラーの作成
effekseer_renderer = ::EffekseerRendererGL::Renderer::Create(8000, EffekseerRendererGL::OpenGLDeviceType::OpenGL3);
// Create a manager of effects
// エフェクトのマネージャーの作成
effekseer_manager = ::Effekseer::Manager::Create(8000);
// Sprcify rendering modules
// 描画モジュールの設定
effekseer_manager->SetSpriteRenderer(effekseer_renderer->CreateSpriteRenderer());
effekseer_manager->SetRibbonRenderer(effekseer_renderer->CreateRibbonRenderer());
effekseer_manager->SetRingRenderer(effekseer_renderer->CreateRingRenderer());
effekseer_manager->SetTrackRenderer(effekseer_renderer->CreateTrackRenderer());
effekseer_manager->SetModelRenderer(effekseer_renderer->CreateModelRenderer());
// Specify a texture, model, curve and material loader
// It can be extended by yourself. It is loaded from a file on now.
// テクスチャ、モデル、カーブ、マテリアルローダーの設定する。
// ユーザーが独自で拡張できる。現在はファイルから読み込んでいる。
effekseer_manager->SetTextureLoader(effekseer_renderer->CreateTextureLoader());
effekseer_manager->SetModelLoader(effekseer_renderer->CreateModelLoader());
effekseer_manager->SetMaterialLoader(effekseer_renderer->CreateMaterialLoader());
effekseer_manager->SetCurveLoader(Effekseer::MakeRefPtr<Effekseer::CurveLoader>());
// Specify a position of view
// 視点位置を確定
auto g_position = ::Effekseer::Vector3D(10.0f, 5.0f, 20.0f);
// Specify a projection matrix
// 投影行列を設定
effekseer_renderer->SetProjectionMatrix(
::Effekseer::Matrix44().PerspectiveFovRH_OpenGL(90.0f / 180.0f * 3.14f, (float)window_width / (float)window_height, 1.0f, 500.0f));
// Specify a camera matrix
// カメラ行列を設定
effekseer_renderer->SetCameraMatrix(
::Effekseer::Matrix44().LookAtRH(g_position, ::Effekseer::Vector3D(0.0f, 0.0f, 0.0f), ::Effekseer::Vector3D(0.0f, 1.0f, 0.0f)));
// Load an effect
// エフェクトの読込
effekseer_effect = Effekseer::Effect::Create(effekseer_manager, (const EFK_CHAR*)L"effects\\Laser01.efk");
}
void sf_display()
{
// Begin to rendering effects
// エフェクトの描画開始処理を行う。
effekseer_renderer->BeginRendering();
// Render effects
// エフェクトの描画を行う。
effekseer_manager->Draw();
// Finish to rendering effects
// エフェクトの描画終了処理を行う。
effekseer_renderer->EndRendering();
// Swap
window->display();
}
void sf_clear()
{
if (effekseer_time % 120 == 0)
{
// Play an effect
// エフェクトの再生
effekseer_handle = effekseer_manager->Play(effekseer_effect, 0, 0, 0);
}
if (effekseer_time % 120 == 119)
{
// Stop effects
// エフェクトの停止
effekseer_manager->StopEffect(effekseer_handle);
}
// Move the effect
// エフェクトの移動
effekseer_manager->AddLocation(effekseer_handle, ::Effekseer::Vector3D(0.2f, 0.0f, 0.0f));
// Update the manager
// マネージャーの更新
effekseer_manager->Update();
// Control effect loop
effekseer_time++;
// glClear
window->clear();
}