Code Search for Developers
 
 
  

unit1.pas from Sector-37 at Krugle


Show unit1.pas syntax highlighted

unit Unit1;

interface

{$I GLScene.inc}

uses
  //VCL
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,
  //GLScene
  GLCadencer, GLScene, GLObjects, GLMisc, GLWin32Viewer, GLTexture,
  GLGeomObjects, GLMesh, VectorGeometry, VectorTypes, OpenGL1x,
  //Stranger components
  StrangeMathUtilities{$IFDEF STRANGE_INIFILE_SUPPORT}, StrangeIniObjects{$ENDIF};

type
  TForm1 = class(TForm)
    GLScene1: TGLScene;
    GLSceneViewer1: TGLSceneViewer;
    GLCamera1: TGLCamera;
    cad: TGLCadencer;
    GLLightSource1: TGLLightSource;
    GLPlane1: TGLPlane;
    GLSphere1: TGLSphere;
    GLDirectOpenGL1: TGLDirectOpenGL;
    GroupBox1: TGroupBox;
    SafeDotRadioButton: TRadioButton;
    LineLineDistRadioButton: TRadioButton;
    XYRadioButton: TRadioButton;
    AffineVectorArrayCenterRadioButton: TRadioButton;
    Timer1: TTimer;
    ResultLabel: TLabel;
    Label1: TLabel;
    NoneRadioButton: TRadioButton;
    GLArrowLine1: TGLArrowLine;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure cadProgress(Sender: TObject; const DeltaTime, newTime: Double);
    procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure GLDirectOpenGL1Render(Sender: TObject; var rci: TRenderContextInfo);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1:  TForm1;
  mx, my: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  //nothing here...
end;


procedure TForm1.cadProgress(Sender: TObject; const DeltaTime, newTime: Double);
begin
  GLSceneViewer1.Invalidate;
end;


procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  mx := X;
  my := Y;
end;


procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if not (ssRight in Shift) then
    Exit;
  GLCamera1.MoveAroundTarget(Y - my, X - mx);
  my := Y;
  mx := X;
end;


procedure TForm1.GLDirectOpenGL1Render(Sender: TObject; var rci: TRenderContextInfo);
var
  A1, A2:    TVector3f;
  B1, B2:    TVector3f;
  C1, C2:    TVector3f;
  X1, X2, X: Tvector3f;
begin
  //Testing function SafeDot
  glDisable(GL_LIGHTING);

  if SafeDotRadioButton.Checked then
  begin
    A1 := AffineVectorMake(-10, 0, 8);
    A2 := AffineVectorMake(12, 0, -3);

    glColor3b(50, 12, 127);
    glbegin(GL_LINES);
    glVertex3f(A1[0], A1[1], A1[2]);
    glVertex3f(A2[0], A2[1], A2[2]);
    glend;

    X := SafeDot(A1, A2, GLSphere1.Position.AsAffineVector, GLSphere1.Radius + 2);

    glColor3b(127, 50, 0);
    glPointSize(10);
    glbegin(GL_POINTS);
    glVertex3f(X[0], X[1], X[2]);
    glend;

    GLSphere1.Visible := True;
  end
  else
  begin
    GLSphere1.Visible := False;
  end;

  //Testing function LineLineDist
  if LineLineDistRadioButton.Checked then
  begin
    A1 := AffineVectorMake(-10, -10, -1);
    A2 := AffineVectorMake(-19, 10, 0);

    B1 := AffineVectorMake(19, -10, -1);
    B2 := AffineVectorMake(10, 10, 0);

    glColor3b(50, 12, 127);
    glbegin(GL_LINES);
    glVertex3f(A1[0], A1[1], A1[2]);
    glVertex3f(A2[0], A2[1], A2[2]);
    glend;
    glbegin(GL_LINES);
    glVertex3f(B1[0], B1[1], B1[2]);
    glVertex3f(B2[0], B2[1], B2[2]);
    glend;


    ResultLabel.Caption := IntToStr(Round(LineLineDist(A1, A2, B1, B2, X1, X2)));
    glColor3b(127, 127, 0);
    glbegin(GL_LINES);
    glVertex3f(x1[0], x1[1], x1[2]);
    glVertex3f(x2[0], x2[1], x2[2]);
    glend;
  end;


  //Testing function XY
  if XYRadioButton.Checked then
  begin
    C1 := AffineVectorMake(-10, 20, 20);
    C2 := AffineVectorMake(10, -10, -10);
    X := XY(C1, C2, 2);

    glColor3b(10, 52, 10);
    glbegin(GL_LINES);
    glVertex3f(C1[0], C1[1], C1[2]);
    glVertex3f(C2[0], C2[1], C2[2]);
    glend;

    glPointSize(10);
    glColor3b(127, 0, 0);
    glbegin(GL_POINTS);
    glVertex3f(X[0], X[1], X[2]);
    glend;
  end;

  if AffineVectorArrayCenterRAdioButton.Checked then
  begin
    //Testing function AffineVectorArrayCenter
    A1 := AffineVectorMake(-10, -10, -1);
    A2 := AffineVectorMake(-19, 10, 0);

    B1 := AffineVectorMake(19, -10, -1);
    B2 := AffineVectorMake(10, 10, 0);

    C1 := AffineVectorMake(-10, 20, 20);
    C2 := AffineVectorMake(10, -10, -10);

    glPointSize(4);
    glColor3b(30, 112, 17);
    glbegin(GL_POINTS);
    glVertex3f(A1[0], A1[1], A1[2]);
    glVertex3f(A2[0], A2[1], A2[2]);
    glVertex3f(B1[0], B1[1], B1[2]);
    glVertex3f(B2[0], B2[1], B2[2]);
    glVertex3f(C1[0], C1[1], C1[2]);
    glVertex3f(C2[0], C2[1], C2[2]);
    glend;

    X := AffineVectorArrayCenter([A1, A2, B1, B2, C1, C1]);
    glColor3b(127, 50, 0);
    glPointSize(10);
    glbegin(GL_POINTS);
    glVertex3f(X[0], X[1], X[2]);
    glend;
  end;

  glenable(GL_LIGHTING);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Caption := 'StrangeMathUtilities Demo by Da Stranger (August ''2006)  -  ' + GLSceneViewer1.FramesPerSecondText;
  GLSceneViewer1.ResetPerformanceMonitor;
end;

end.





See more files for this project here

Sector-37

Sector-37 (real time 3D cosmic strategy)

Project homepage: http://sourceforge.net/projects/sector37
Programming language(s): Pascal
License: lgpl21

  StrangeMathDemo.dpr
  StrangeMathDemo.res
  _Cleanup.bat
  unit1.dfm
  unit1.pas