Eeee... vidis... zaboravih na FPS

Pa... mogao bi neko da uradi nesto slicno i da ubaci i FPS.
U ovakvoj animaciji bi prilicno lepo izgledalo da Enterprise ispali laserski zrak na neki od asterioida i da se on raspadne. Zrak bi mogao vrlo lako da se naprvi koriscenjem ThorFX... vatra u eksploziji nekim od ParticlePFX managerom i sa nekim crvenim svetlom, ali raspad 3d objekta i nije bas tako lak... ili... da li je?

U GLScene postoji ExplosionFx koji sluzi da "explodira" neki 3d objekat. Imajte na umu da ne mogu svi objekti da koriste ovaj efekat... samo oni koji sadrze podatke o mesh-u (vertexi, normale, koordinate textura) kao sto su GLFreeForm i GLActor.
Opet cemo koristiti
Waste model. Postavimo na scenu kameru, svetlo i jedan GLFreeForm (0, 0, -4) objekat. Posto je Waste.md2 malo velik postavimo Scale na 0.05, 0.05, 0.05 i zbog razlike u orientaciji PitchAngle na 90. Sada da ucitamo nas model, a to vec znate kako se radi
Code:
uses
GLFileMD2;
procedure TForm1.FormCreate(Sender: TObject);
begin
GLFreeForm1.LoadFromFile('waste.md2');
end;
Sada dodajmo ExplosionFx efekat GLFreeForm objektu.
Direction property odredjuje na koju stranu ce parcici objekta biti "oduvani". Ako je Directino 0, 0, 0 onda se razlecu na sve strane.
MaxSteps odredjuje koliko ce dugo u "koracima" ce explozija da traje dok objekat ne postane nevidljiv.
Speed je brzina kretanja delova.
Ovo je jedan od komponenti koja ima bug... sve sto se podesi u designtime ne utice na ExplosionFx tako da se svi parametri moraju podesavati u runtime... nista nije savrseno

Bacimo jedan TButton na formu u kojem cemo podesiti sve sto nam je potrebno i pokrenuti exploziju
Code:
uses
GLExplosionFx;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TGLBExplosionFx(GLFreeForm1.Effects.Items[0]) do
begin
MaxSteps := 0;
Speed := 0.1;
Enabled := True;
end;
end;
U Cadencer.OnProgress dodajmo da svaki put iscrtava scenu (GLSceneViewer1.Invalidate) i pokrenimo program. Kada kliknemo da dugme objekat se raspada
Problem je ako zelimo da imamo sacuvane podatke o objektu i posle explozije jer jexplizija menja koordinate vertexa i oni se vise ne mogu vratiti... zato ako je potrebno prvo treba napraviti kopiju objekta i tak onda pokrenuti exploziju. Dodacemo jos jedan GLFreeForm objekat koji ce nam cuvati podatke i u OnCreate eventu forme napisati
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
GLFreeForm1.LoadFromFile('waste.md2');
GLFreeForm2.Assign(GLFreeForm1);
GLFreeForm2.Visible := False;
end;
Time cemo sve podatke iz GLFreeForm1 prebaciti u GLFreeForm2 i postaviti da se drugi objekat ne vidi.
Sada jos samo da malo promenimo OnClick event dugmeta i mocicemo da klikcemo koliko hocemo i da nas objekat svaki put explodira iz pocetka
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
TGLBExplosionFx(GLFreeForm1.Effects.Items[0]).Reset;
GLFreeForm1.Assign(GLFreeForm2);
GLFreeForm1.Visible := True;
with TGLBExplosionFx(GLFreeForm1.Effects.Items[0]) do
begin
MaxSteps := 0;
Speed := 0.1;
Enabled := True;
end;
end;
Prvo sto radimo je zaustavljanje explozije, zatim prebacujemo podatke o izgledu objekta u GLFreeForm1 i postavljamo VIsible na true da bi se video... ostatak je poznat. Probajte sad program
Explozija i nije mnogo realna... ali bar se lako koristi i bolja je nego nista
BTW: Sta bi zeleli da sledece radimo? Imamo scripting, shadere, physic... Ako neko ima neku zanimljivu ideju (animaciju, igru, demo...), a ne moze sam da se snadje neka PM pa cu mu ili joj pomoci.