By Genomelink

Discover Your Roots

SIGN UP

Menu

Unlock your exclusive free family tree map

CREATE ACCOUNT

Topenglpanel

// Set shader program (simple fixed-function style) Context.SetShader(TShaderManager.DefaultShader);

uses System.UITypes, FMX.Graphics, System.Math;

// Each face: two triangles (4 vertices) Context.DrawCubeFace(i, 1.0); // Custom helper (see below) end; end;

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; TOpenGlPanel

destructor TMyOpenGLPanel.Destroy; begin FTimer.Free; inherited; end;

ProjMat := TMatrix.CreatePerspectiveFovRH( DegToRad(60), // Field of view Width / Max(Height, 1), // Aspect ratio 0.1, 100.0 // Near/far planes );

// Setup matrices ModelMat := TMatrix.Identity; ModelMat := ModelMat * TMatrix.CreateRotationY(DegToRad(FAngle)); ModelMat := ModelMat * TMatrix.CreateRotationX(DegToRad(FAngle * 0.7)); // Set shader program (simple fixed-function style) Context

Context.SetModelViewMatrix(ModelMat * ViewMat); Context.SetProjectionMatrix(ProjMat);

end. procedure TForm1.FormCreate(Sender: TObject); begin var Panel := TMyOpenGLPanel.Create(Self); Panel.Parent := Self; Panel.Align := TAlignLayout.Client; Panel.StartAnimation; end; Custom Helper (simplified cube drawing) Add this to the implementation section or a separate unit:

{ TMyOpenGLPanel }

procedure TMyOpenGLPanel.StartAnimation; begin FTimer.Enabled := True; end;

unit uOpenGLPanelDemo; interface

procedure TMyOpenGLPanel.OnTimer(Sender: TObject); begin FAngle := FAngle + 2; if FAngle >= 360 then FAngle := FAngle - 360; Repaint; // triggers Paint method end; // Custom helper (see below) end

procedure TMyOpenGLPanel.StopAnimation; begin FTimer.Enabled := False; end;