123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "GLWin32Viewer"
- #pragma link "GLAVIRecorder"
- #pragma link "GLCadencer"
- #pragma link "GLAsyncTimer"
- #pragma link "GLObjects"
- #pragma link "GLScene"
- #pragma link "GLAVIRecorder"
- #pragma link "GLKeyboard"
- #pragma link "GLBaseClasses"
- #pragma link "GLCoordinates"
- #pragma link "GLCrossPlatform"
- #pragma resource "*.dfm"
- TForm1 *Form1;
- bool UserAbort;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent * Owner):TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::TrackBarChange(TObject * Sender)
- {
- int t = TrackBar->Position;
- // the "sun" spins slowly
- Cube1->TurnAngle = (float)t / 4;
- // "earth" rotates around the sun and spins
- DummyCube1->TurnAngle = (float)-t;
- Cube2->TurnAngle = (float)t *2;
- // "moon" rotates around earth and spins
- DummyCube2->RollAngle = (float)3 *t;
- Cube3->TurnAngle = (float)4 *t;
- // update FPS count
- StaticText1->Caption =
- IntToStr(Trunc(GLSceneViewer1->FramesPerSecond())) + " FPS";
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormResize(TObject * Sender)
- {
- GLSceneViewer1->ResetPerformanceMonitor();
- AVIRecorder1->Width = GLSceneViewer1->Width;
- AVIRecorder1->Height = GLSceneViewer1->Height;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Button1Click(TObject * Sender)
- {
- if(!AVIRecorder1->CreateAVIFile(0))
- return;
- // if AVIRecorder1.filename is empty, a dialog box will appear asking
- // for the filename. CreateAVIFile() will return a bool
- // indicating if user presses "cancel" in the dialog box.
- String SavedCap = Caption;
- Caption = "Press ESC to abort";
- UserAbort = false;
- StaticText1->Visible = false; // the FPS shown is not correct now,
- // so just hide it for the time being.
- int i = 0;
- Button1->Enabled = false;
- TrackBar->Enabled = false;
- try
- {
- while((i < 360) && !UserAbort)
- {
- TrackBar->Position = i;
- TrackBarChange(this);
- AVIRecorder1->AddAVIFrame();
- // you might want to update your progress bar here.
- Application->ProcessMessages(); // so that our app. is not freezed,
- // and will accept user abort.
- i++;
- }
- }
- __finally
- {
- AVIRecorder1->CloseAVIFile(UserAbort); // if UserAbort, CloseAVIFile will
- // also delete the unfinished file.
- Caption = SavedCap;
- StaticText1->Visible = true;
- Button1->Enabled = true;
- TrackBar->Enabled = true;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::AVIRecorder1PostProcessEvent(TObject * Sender,
- TBitmap * frame)
- {
- // PostProcess event is used to add a "watermark"
- // that will be in the AVI, but isn't visible on-screen
- TCanvas *c = frame->Canvas;
- c->Font->Color = clAqua;
- c->Font->Name = "Courrier New";
- c->Font->Size = 24;
- c->Font->Style = (c->Font->Style << fsBold);
- c->Brush->Style = bsClear;
- String s;
- s.printf("GLScene %.3d", TrackBar->Position);
- c->TextOut(20, 20, s);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
- {
- UserAbort = IsKeyDown(VK_ESCAPE);
- }
- //---------------------------------------------------------------------------
|