[SFML]System cząsteczkowy
Ostatnio zmodyfikowano 2014-02-14 12:33
kokon Temat założony przez niniejszego użytkownika |
[SFML]System cząsteczkowy » 2014-02-14 10:52:56 Witam, ostatnio zacząłem pisać system cząsteczkowy do mojej gry, i utknąłem w martwym punkcie. Dokładnie chodzi o punkt, w który trzeba wyliczyć gdzie powinna się znaleźć cząsteczka po przejściu jednej kratki. A przy okazji, mógłby powiedzieć mi, czy robię to poprawnie, czy powinienem to rozwiązać jakość inaczej? Bo to moja pierwsza próba jeśli chodzi o takie rzeczy ;) Kod: particles.hpp #ifndef PARTICLES_HPP_INCLUDED #define PARTICLES_HPP_INCLUDED #include <SFML/Graphics.hpp> #include <iostream>
extern sf::RenderWindow oknoAplikacji;
class particle { public: void render( sf::RenderWindow * a ); particle( short x2, short y2, short direction2, short power2 ); private: short x; short y; short direction; short power; short opadanie; };
class emitter { public: void render( sf::RenderWindow * a ); void emit( short x, short y ); private: particle ** pTab; }; #endif
particles.cpp #include "particles.hpp"
void emitter::emit( short x, short y ) { this->pTab = new particle *[ 80 ]; for( int i = 0; i < 80; ++i ) { pTab[ i ] = new particle( x, y,( rand() % 360 ) + 0,( rand() % 15 ) + 0 ); } };
void emitter::render( sf::RenderWindow * a ) { for( int i = 0; i < 80; ++i ) { pTab[ i ]->render( a ); } };
particle::particle( short x2, short y2, short direction2, short power2 ) { this->x = x2; this->y = y2; this->direction = direction2; this->power = power2; };
void particle::render( sf::RenderWindow * a ) { std::cout << "Testowy particl sie melduje" << std::endl; sf::VertexArray kwadrat( sf::Quads, 4 ); kwadrat[ 0 ].color = sf::Color::Red; kwadrat[ 1 ].color = sf::Color::Red; kwadrat[ 2 ].color = sf::Color::Red; kwadrat[ 3 ].color = sf::Color::Red; kwadrat[ 0 ].position = sf::Vector2f( this->x, this->y ); kwadrat[ 1 ].position = sf::Vector2f( this->x + 3, this->y ); kwadrat[ 2 ].position = sf::Vector2f( this->x + 3, this->y + 3 ); kwadrat[ 3 ].position = sf::Vector2f( this->x, this->y + 3 ); a->draw( kwadrat ); };
Z góry dziękuję za wszelką pomoc. |
|
PsichiX |
» 2014-02-14 12:33:00 Przede wszystkim particle to rzecz, która powinna być zoptymalizowana pod kątem jak najszybszego renderingu - czyli załatwiona jednym draw callem. Rozwiązanie jest proste ideologicznie: jeden wielki vertex buffer ze wszystkimi particlesami. Oczywiście ustawiasz sobie limit np. jednego miliona cząstek i operujesz ich skalą dla uzyskania funkcjonalności "żywa/martwa" cząstka. To tak odnośnie złego podejścia jakie zastosowałeś aktualnie, czyli rysowanie każdego z osobna. Serio, da się uzyskać 30fps dla miliona cząstek na ekranie, chociażby używając Float Textures do przechowywania danych o cząstkach. |
|
« 1 » |