2
// This unit is part of the GLScene Engine https://github.com/glscene
5
Material Preview frame.
7
// There was problems with GLSceneViewer and TFrame (ïðè ïåðåäà÷å handle to buffer),
8
// so now is using MemoryViewer
10
unit FRMaterialPreview;
40
TRMaterialPreview = class(TFrame)
41
GLMemoryViewer1: TGLMemoryViewer;
48
LightSource: TGLLightSource;
49
CBBackground: TComboBox;
50
BackGroundSprite: TGLHUDSprite;
56
FireSphere: TGLSphere;
57
GLMaterialLibrary: TGLMaterialLibrary;
58
procedure CBObjectChange(Sender: TObject);
59
procedure CBBackgroundChange(Sender: TObject);
60
procedure imgFullMouseDown(Sender: TObject; Button: TMouseButton;
61
Shift: TShiftState; X, Y: Integer);
62
procedure imgFullMouseMove(Sender: TObject; Shift: TShiftState; X,
64
procedure imgFullMouseWheel(Sender: TObject; Shift: TShiftState;
65
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
66
procedure imgFullResize(Sender: TObject);
67
procedure Timer1Timer(Sender: TObject);
70
function GetMaterial: TGLMaterial;
71
procedure SetMaterial(const Value: TGLMaterial);
76
constructor Create(AOwner : TComponent); override;
77
destructor Destroy; override;
78
property Material : TGLMaterial read GetMaterial write SetMaterial;
82
// ------------------------------------------------------------------
83
// ------------------------------------------------------------------
84
// ------------------------------------------------------------------
86
// ------------------------------------------------------------------
87
// ------------------------------------------------------------------
88
// ------------------------------------------------------------------
93
constructor TRMaterialPreview.Create(AOwner : TComponent);
96
BackGroundSprite.Position.X := imgFull.Width div 2;
97
BackGroundSprite.Position.Y := imgFull.Height div 2;
98
BackGroundSprite.Width := imgFull.Width;
99
BackGroundSprite.Height := imgFull.Height;
101
CBObject.ItemIndex:=0; CBObjectChange(Self);
102
CBBackground.ItemIndex:=0; CBBackgroundChange(Self);
105
destructor TRMaterialPreview.Destroy;
110
procedure TRMaterialPreview.CBObjectChange(Sender: TObject);
114
i:=CBObject.ItemIndex;
115
Cube.Visible := I = 0;
116
Sphere.Visible := I = 1;
117
Cone.Visible := I = 2;
118
Teapot.Visible := I = 3;
121
procedure TRMaterialPreview.CBBackgroundChange(Sender: TObject);
125
case CBBackground.ItemIndex of
126
1 : bgColor:=clWhite;
127
2 : bgColor:=clBlack;
130
5 : bgColor:=clGreen;
134
with BackGroundSprite.Material do begin
135
Texture.Disabled:=(bgColor<>clNone);
136
FrontProperties.Diffuse.Color:=ConvertWinColor(bgColor);
140
procedure TRMaterialPreview.imgFullMouseDown(Sender: TObject;
141
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
147
procedure TRMaterialPreview.imgFullMouseMove(Sender: TObject;
148
Shift: TShiftState; X, Y: Integer);
150
if (ssRight in Shift) and (ssLeft in Shift) then
151
Camera.AdjustDistanceToTarget(1 - 0.01 * (MY - Y))
153
if (ssRight in Shift) or (ssLeft in Shift) then
154
Camera.MoveAroundTarget(Y - MY, X - MX);
160
procedure TRMaterialPreview.imgFullMouseWheel(Sender: TObject;
161
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
162
var Handled: Boolean);
164
Camera.AdjustDistanceToTarget(1 - 0.1 * (Abs(WheelDelta) / WheelDelta));
167
procedure TRMaterialPreview.imgFullResize(Sender: TObject);
169
GLMemoryViewer1.Height:= imgFull.Height;
170
GLMemoryViewer1.Width:= imgFull.Width;
173
procedure TRMaterialPreview.Timer1Timer(Sender: TObject);
177
fWidth, fHeight:Integer;
180
GLMemoryViewer1.Render;
181
Image := GLMemoryViewer1.Buffer.CreateSnapShot;
182
Bitmap := Image.Create32BitsBitmap;
184
imgFull.Canvas.Brush.Color := clBlack;
185
imgFull.Canvas.FillRect(imgFull.Canvas.ClipRect);
186
fWidth :=imgFull.Width;
187
fHeight:= imgFull.Height;
188
imgFull.Canvas.StretchDraw(Rect(0, 0, fWidth, fHeight), Bitmap);{}
195
function TRMaterialPreview.GetMaterial: TGLMaterial;
197
Result := GLMaterialLibrary.Materials[0].Material;
200
procedure TRMaterialPreview.SetMaterial(const Value: TGLMaterial);
202
GLMaterialLibrary.Materials[0].Material.Assign(Value);
205
Procedure TRMaterialPreview.Render;
207
Timer1.OnTimer(self);
210
// ------------------------------------------------------------------
211
// ------------------------------------------------------------------
212
// ------------------------------------------------------------------
214
// ------------------------------------------------------------------
215
// ------------------------------------------------------------------
216
// ------------------------------------------------------------------
218
{$i FRMaterialPreview.lrs}