type TMyOpenGLPanel = class(TOpenGLPanel) private FAngle: Single; FTimer: TTimer; procedure OnTimer(Sender: TObject); protected procedure Paint; override; procedure Resize; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure StartAnimation; procedure StopAnimation; end;
procedure TMyOpenGLPanel.Paint; var ModelMat, ViewMat, ProjMat: TMatrix; Center: TPoint3D; i: Integer; begin inherited; if not Assigned(Context) then Exit; TOpenGlPanel
procedure TMyOpenGLPanel.Resize; begin inherited; if Assigned(Context) then Context.SetViewport(RectF(0, 0, Width, Height)); end; procedure OnTimer(Sender: TObject)
uses System.UITypes, FMX.Graphics, System.Math; protected procedure Paint
// Setup matrices ModelMat := TMatrix.Identity; ModelMat := ModelMat * TMatrix.CreateRotationY(DegToRad(FAngle)); ModelMat := ModelMat * TMatrix.CreateRotationX(DegToRad(FAngle * 0.7));
// Each face: two triangles (4 vertices) Context.DrawCubeFace(i, 1.0); // Custom helper (see below) end; end;