123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #include <stdlib.h>
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "GLS.SceneViewer"
- #pragma link "GLS.VectorGeometry"
- #pragma link "GLS.Behaviours"
- #pragma link "GLS.Cadencer"
- #pragma link "GLS.Particles"
- #pragma link "GLS.Objects"
- #pragma link "GLS.Scene"
- #pragma link "GLS.BaseClasses"
- #pragma link "GLS.Coordinates"
- #pragma link "GLS.SceneViewer"
- #pragma link "GLS.SceneViewer"
- #pragma resource "*.dfm"
- TForm1 *Form1;
- float random(void)
- {
- return (float)(rand() & 0xFFF) / (float)0xFFF;
- }
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent * Owner):TForm(Owner)
- {
- String MediaPath = ExtractFilePath(ParamStr(0));
- int I = MediaPath.Pos("Demos");
- if (I != 0) {
- MediaPath.Delete(I+5,MediaPath.Length()-(I+5));
- MediaPath += "Media\\";
- SetCurrentDir(MediaPath);
- }
- Sprite1->Material->Texture->Image->LoadFromFile(MediaPath+"Flare1.bmp");
- Randomize();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLParticles1ActivateParticle(TObject * Sender,
- TGLBaseSceneObject *
- particle)
- {
- // this event is called when a particle is activated,
- // ie. just before it will be rendered
- TGLFaceProperties *fp = ((TGLSprite *) particle)->Material->FrontProperties;
- // we pick a random color
- fp->Emission->Color = PointMake(random(), random(), random());
- // our halo starts transparent
- fp->Diffuse->Alpha = 0;
- // this is our "birth time"
- ((TGLSprite *) particle)->TagFloat = GLCadencer1->CurrentTime;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Sprite1Progress(TObject * Sender,
- const double deltaTime,
- const double newTime)
- {
- double life;
- // calculate for how long we've been living
- life = (newTime - ((TGLSprite *) Sender)->TagFloat);
- if(life > 10)
- // old particle to kill
- GLParticles1->KillParticle((TGLSprite *) Sender);
- else if(life < 1)
- // baby particles become brighter in their 1st second of life...
- ((TGLSprite *) Sender)->Material->FrontProperties->Diffuse->Alpha = life;
- else // ...and slowly disappear in the darkness
- ((TGLSprite *) Sender)->Material->FrontProperties->Diffuse->Alpha =
- (9.0 - life) / 9.0;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Timer1Timer(TObject * Sender)
- {
- // every timer, we create a particle at a random position
- TGLCoordinates *c = ((TGLSprite *) GLParticles1->CreateParticle())->Position;
- c->X = 3 * (random() - 0.5);
- c->Y = 3 * (random() - 0.5);
- c->Z = 3 * (random() - 0.5);
- // infos for the user
- Caption = "GLS.Scene Particles - "+
- Format("%d particles, %.1f FPS", ARRAYOFCONST((GLParticles1->Count - 1,
- GLSceneViewer1->FramesPerSecond())));
- GLSceneViewer1->ResetPerformanceMonitor();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormResize(TObject * Sender)
- {
- // change focal so the view will shrink and not just get clipped
- GLCamera1->FocalLength = 50 * Width / 280;
- }
- //---------------------------------------------------------------------------
|