Show Unit1.pas syntax highlighted
//this is a modified example, original author of which is Blaise Bernier (08/12/2003)
unit Unit1;
interface
{$I GLScene.inc}
uses
//VCL
Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,
//GLScene
GLMisc, GLWin32Viewer, GLVectorFileObjects, OpenGL, GLTexture, GLCadencer,
GLObjects, GLScene, GLMaterialMultiProxy,
//File formats
GLFile3DS, JPEG,
//Strange components
StrangeModelManager
{$IFDEF STRANGE_INIFILE_SUPPORT},StrangeIniObjects{$ENDIF};
type
TForm1 = class(TForm)
Panel1: TPanel;
GLSceneViewer1: TGLSceneViewer;
GLScene1: TGLScene;
gloMasterDummy: TGLDummyCube;
GLCamera1: TGLCamera;
gloScene: TGLDummyCube;
Button1: TButton;
GLLightSource1: TGLLightSource;
lblCount: TLabel;
lstModels: TListBox;
lblProxies: TLabel;
c1: TComboBox;
Button2: TButton;
GLCadencer1: TGLCadencer;
Timer1: TTimer;
Button3: TButton;
GLMaterialLibrary1: TGLMaterialLibrary;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure GLCadencer1Progress(Sender: TObject; const DeltaTime, newTime: Double);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
procedure UpdateGUI;
{ Public declarations }
end;
var
Form1: TForm1;
Manager: TStrangeModelManager; // The model manager
Mx, My: Integer;
implementation
{$R *.dfm}
procedure TForm1.UpdateGUI;
var
Tmp: Integer;
begin
// Keep track of the manager's list
lblCount.Caption := 'Models in the list : ' + IntToStr(gloMasterDummy.Count);
lblProxies.Caption := 'Proxies in the scene : ' + IntToStr(gloScene.Count);
Tmp := lstModels.ItemIndex;
lstModels.Items := Manager.ModelList;
if lstModels.Count > Tmp then
lstModels.ItemIndex := Tmp;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
// Create the manager : give him a dummycube to store the freeforms
// and give him the path to the models
Manager := TStrangeModelManager.Create(gloMasterDummy);
with GLMaterialLibrary1.Materials.Add do
begin
Material.Texture.Image.LoadFromFile('Data\Tex5.bmp');
Material.Texture.Enabled := True;
end;
with GLMaterialLibrary1.Materials.Add do
begin
Material.Texture.Image.LoadFromFile('Data\Tex3.bmp');
Material.Texture.Enabled := True;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
NewProxy: TGLMaterialMultiProxy;
function RandomCoord: Single;
begin
Result := (Random * 20) - 10;
end;
begin
// This is the creation of a new proxy
NewProxy := TGLMaterialMultiProxy(gloScene.AddNewChild(TGLMaterialMultiProxy));
NewProxy.Position.X := RandomCoord;
NewProxy.Position.Y := RandomCoord;
NewProxy.Position.Z := RandomCoord;
// Need a master object for this new proxy?
// Just use the manager :
NewProxy.MaterialLibrary := GLMaterialLibrary1;
NewProxy.MasterObjects.Add(Manager.LoadModel(c1.Text), GLMaterialLibrary1.Materials[0], 0, 75);
NewProxy.MasterObjects.Add(Manager.LoadModel(c1.Text), GLMaterialLibrary1.Materials[1], 75, 100);
UpdateGUI;
end;
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
//Rotate the camera
if (ssRight in Shift) then
GLCamera1.MoveAroundTarget(Y - mY, mX - X);
mX := X;
mY := Y;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
sel: string;
I, Index: Integer;
begin
if (lstModels.Items.Text = '') or (lstModels.ItemIndex = -1) then
begin
ShowMessage('Error: Nothing was selected, dude!');
Exit;
end;
sel := lstModels.Items[lstModels.ItemIndex];
manager.ModelList.Find(sel, Index);
I := GLoScene.Count - 1;
while I > -1 do
begin
if TGLMaterialMultiProxy(GLoScene.Children[I]).masterobjects[0].masterobject = Manager.ModelList.Objects[Index] then
GLoScene.Children[I].Free;
Dec(I);
end;
UpdateGUI;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption := 'GLMaterialMultiProxy Test application by Da Stranger - ' + GLSceneViewer1.FramesPerSecondText;
GLSceneViewer1.ResetPerformanceMonitor;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if (lstModels.Items.Text = '') or (lstModels.ItemIndex = -1) then
begin
ShowMessage('Error: Nothing was selected, dude!');
Exit;
end;
//first remove all the proxies
Button2Click(self);
//then remove the masterobject
Manager.RemoveModel(lstModels.ItemIndex, True);
UpdateGUI;
end;
procedure TForm1.GLCadencer1Progress(Sender: TObject; const DeltaTime, newTime: Double);
begin
gloScene.Turn(DeltaTime * 10);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Manager.Free;
end;
end.
See more files for this project here