| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- //
- // The graphics rendering engine GLScene http://glscene.org
- //
- unit FRMaterialPreview;
- (* Material Preview frame. *)
- interface
- {$I GLScene.inc}
- uses
- System.Types,
- System.Classes,
- VCL.Graphics,
- VCL.Forms,
- VCL.StdCtrls,
- VCL.ComCtrls,
- Vcl.Controls,
- GLS.Scene,
- GLS.VectorTypes,
- GLS.Objects,
- GLS.Texture,
- GLS.HudObjects,
- GLS.SceneViewer,
- GLS.GeomObjects,
- GLS.Color,
- GLS.Coordinates,
- GLS.BaseClasses,
- GLS.Material;
- type
- TRMaterialPreview = class(TFrame)
- GLScene: TGLScene;
- CBObject: TComboBox;
- Camera: TGLCamera;
- Cube: TGLCube;
- Sphere: TGLSphere;
- LightSource: TGLLightSource;
- CBBackground: TComboBox;
- BackGroundSprite: TGLHUDSprite;
- Cone: TGLCone;
- Teapot: TGLTeapot;
- World: TGLDummyCube;
- Light: TGLDummyCube;
- FireSphere: TGLSphere;
- GLMaterialLibrary: TGLMaterialLibrary;
- GLSceneViewer: TGLSceneViewer;
- procedure CBObjectChange(Sender: TObject);
- procedure CBBackgroundChange(Sender: TObject);
- procedure SceneViewerMouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- procedure SceneViewerMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure SceneViewerMouseWheel(Sender: TObject; Shift: TShiftState;
- WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
- private
- FLibMaterial: TGLAbstractLibMaterial;
- function GetMaterial: TGLMaterial;
- procedure SetMaterial(const Value: TGLMaterial);
- function GetLibMaterial: TGLAbstractLibMaterial;
- procedure SetLibMaterial(const Value: TGLAbstractLibMaterial);
- public
- constructor Create(AOwner : TComponent); override;
- property Material : TGLMaterial read GetMaterial
- write SetMaterial;
- property LibMaterial : TGLAbstractLibMaterial read GetLibMaterial
- write SetLibMaterial;
- end;
- // ------------------------------------------------------------------
- implementation
- // ------------------------------------------------------------------
- {$R *.dfm}
- var
- MX, MY: Integer;
- constructor TRMaterialPreview.Create(AOwner : TComponent);
- begin
- inherited;
- BackGroundSprite.Position.X := GLSceneViewer.Width div 2;
- BackGroundSprite.Position.Y := GLSceneViewer.Height div 2;
- BackGroundSprite.Width := GLSceneViewer.Width;
- BackGroundSprite.Height := GLSceneViewer.Height;
- CBObject.ItemIndex:=0; CBObjectChange(Self);
- CBBackground.ItemIndex:=0; CBBackgroundChange(Self);
- end;
- procedure TRMaterialPreview.CBObjectChange(Sender: TObject);
- var
- i : Integer;
- begin
- i:=CBObject.ItemIndex;
- Cube.Visible := I = 0;
- Sphere.Visible := I = 1;
- Cone.Visible := I = 2;
- Teapot.Visible := I = 3;
- end;
- procedure TRMaterialPreview.CBBackgroundChange(Sender: TObject);
- var
- bgColor : TColor;
- begin
- case CBBackground.ItemIndex of
- 1 : bgColor:=clWhite;
- 2 : bgColor:=clBlack;
- 3 : bgColor:=clBlue;
- 4 : bgColor:=clRed;
- 5 : bgColor:=clGreen;
- else
- bgColor:=clNone;
- end;
- with BackGroundSprite.Material do begin
- Texture.Disabled:=(bgColor<>clNone);
- FrontProperties.Diffuse.Color:=ConvertWinColor(bgColor);
- end;
- end;
- procedure TRMaterialPreview.SceneViewerMouseMove(Sender: TObject;
- Shift: TShiftState; X, Y: Integer);
- begin
- if (ssRight in Shift) and (ssLeft in Shift) then
- Camera.AdjustDistanceToTarget(1 - 0.01 * (MY - Y))
- else
- if (ssRight in Shift) or (ssLeft in Shift) then
- Camera.MoveAroundTarget(Y - MY, X - MX);
- MX := X;
- MY := Y;
- end;
- procedure TRMaterialPreview.SceneViewerMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- begin
- MX := X;
- MY := Y;
- end;
- procedure TRMaterialPreview.SceneViewerMouseWheel(Sender: TObject;
- Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
- var Handled: Boolean);
- begin
- Camera.AdjustDistanceToTarget(1 - 0.1 * (Abs(WheelDelta) / WheelDelta));
- end;
- function TRMaterialPreview.GetMaterial: TGLMaterial;
- begin
- Result := GLMaterialLibrary.Materials[0].Material;
- end;
- procedure TRMaterialPreview.SetMaterial(const Value: TGLMaterial);
- begin
- GLMaterialLibrary.Materials[0].Material.Assign(Value.GetActualPrimaryMaterial);
- end;
- function TRMaterialPreview.GetLibMaterial: TGLAbstractLibMaterial;
- begin
- Result := FLibMaterial;
- end;
- procedure TRMaterialPreview.SetLibMaterial(const Value: TGLAbstractLibMaterial);
- begin
- FLibMaterial := Value;
- if Assigned(FLibMaterial) then
- begin
- with GLMaterialLibrary.Materials[0] do
- begin
- Material.MaterialLibrary := FLibMaterial.MaterialLibrary;
- Material.LibMaterialName := FLibMaterial.Name
- end;
- end
- else
- with GLMaterialLibrary.Materials[0] do
- begin
- Material.MaterialLibrary := nil;
- Material.LibMaterialName := '';
- end;
- end;
- end.
|