とりあえずSeleneでパーティクル描画

とりあえずSeleneでパーティクルを描画してみます

パーティクルとして表示するイメージは、
なんかいい感じのやつを探してみたのですが、なかなかないので適当に作りました
(爆発のつもりです…見えないけど…)

パーティクルの場合もモデルと同じように描画していきます
生成はこの方法で大丈夫なはず
  • イメージからテクスチャ(Renderer::ITexture)を生成する
  • そのテクスチャを使ってパーティクル(Renderer::Object::IParticle)を生成する
  • そのパーティクルを使ってパーティクルアクター(Scene::IParticleActor)を生成する

app.cpp/CApp::Initialize
  1. // テクスチャの作成
  2. m_pTexture=m_pRender->CreateTextureFromFile("bomb.png");
  3. if(m_pTexture==NULL){return false;}
  4. // パーティクルの作成
  5. m_pParticle=m_pRender->CreateParticle(100,m_pTexture,PARTICLE_TYPE_NORMAL);
  6. if(m_pParticle==NULL){return false;}
  7. // Actorの作成
  8. m_pActor=m_pSceneManager->CreateActor(m_pParticle);
  9. if(m_pActor==NULL){return false;}
  10.  

描画はこの方法で大丈夫なはず
  • まずパーティクル(Renderer::Object::IParticle)のDraw関数でどの座標にどのくらいの大きさで描くかを指定する
必ずRenderer::Object::IParticle::Begin()~::End()の間ですること
  • パーティクルアクター(Scene::IParticleActor)が描画をシーンマネージャーに要請する(RenderingRequest関数)
  • シーンマネージャーに描画させる(Scene::ISceneManager::Rendering関数)
app.cpp/CApp::Run
  1. m_pParticle->SetBasePosition(Math::Vector3D(0.0f,0.0f,0.0f));
  2. m_pParticle->Begin();
  3. m_pParticle->Draw(m_Pos,Math::Point2DF(1.0f,1.0f),Math::Rect2DI(0,0,64,64),CColor(255,255,255));
  4. m_pParticle->End();
  5. // カメラの位置・姿勢情報の更新
  6. m_pCamera->Reset();
  7. m_pCamera->SetTransformSimple(Math::Vector3D(0.0f,0.0f,-8.0f),Math::Vector3D(0.0f,0.0f,0.0f),DEG_TO_ANGLE(0.0f));
  8. m_pCamera->Update();
  9. // シーンマネージャーのリセット
  10. m_pSceneManager->Reset();
  11. m_pSceneManager->SetParameter_BGColor(CColor(128,128,128));
  12. // シーンに平行光を当てる
  13. m_pSceneManager->SetLightParameter_Directional(Math::Vector3D(0.5f,-0.5f,0.7f),Math::Vector3D(0.8f,0.8f,0.8f));
  14. // シーンマネージャーへのレンダリングリクエスト(かならずカメラの位置姿勢を決めてから)
  15. m_pSceneManager->Begin(true);
  16. m_pActor->RenderingRequest();
  17. m_pSceneManager->End();
  18. // 裏画面のクリア(white)
  19. m_pRender->Clear(CColor(255,255,255));
  20. // 画面への描画
  21. m_pRender->Begin();
  22. m_pSceneManager->Rendering(true);
  23. m_pRender->DrawText(Math::Point2DI(0,0),CColor(0,0,0),"Pos=[%2.2f,%2.2f,%2.2f];",m_Pos.x,m_Pos.y,m_Pos.z);
  24. m_pRender->End();
  25.  

void Selene::Renderer::Object::IParticle::Draw(const Math::Vector3D& vPosition, const Math::Point2DF& Size, const Math::Rect2DI& SrcRect,CColor Color)
パーティクルに内部バッファへのデータの追加を行います
vPosition ポイントスプライトの位置
Size ポイントスプライトの大きさ
SrcRect テクスチャの中で描画する領域
Color テクスチャに乗算する色

最終更新:2009年06月14日 04:13
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。
添付ファイル