DGLOPENGL学习01

https://delphigl.com

请从这里下载dglopengl.pas在option里面添加引用。

 

 

 由于是德语网站,请添加翻译软件,嗯,翻译后的语句读起来也是不是很明白。。。

点击顶部的tut0rial进入教程,同样需要翻译软件帮忙,德语完全看不懂。

以下是第一个教程的代码,稍作了一些改动。

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, dglOpenGL;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure IdleHandler(Sender: TObject; var Done: Boolean);
private
{ Private declarations }
StartTime, TimeCount, FrameCount: Cardinal; //FrameCounter
Frames, DrawTime: Cardinal; //& Timebased Movement
procedure SetUpGL;
procedure Render;
procedure ErrorHandler;
public
{ Public declarations }
end;

const
NearClipping = 1;
FarClipping = 1000;

var
Form1: TForm1;
DC: HDC;
RC: HGLRC;

implementation

{$R *.dfm}

procedure TForm1.ErrorHandler;
begin
Form1.Caption := Form1.Caption + gluErrorString(glGetError);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DC := GetDC(Handle);
if not InitOpenGL then
Application.Terminate;
RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
ActivateRenderingContext(DC, RC);
//其他初始化任务
SetUpGL;
Application.OnIdle:=IdleHandler;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DeactivateRenderingContext;
DestroyRenderingContext(RC);
ReleaseDC(Handle, DC);
end;

procedure TForm1.FormResize(Sender: TObject);
var
tmpBool: Boolean;
begin
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45.0, ClientWidth / ClientHeight, NearClipping, FarClipping);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity;

end;

procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
begin
StartTime := GetTickCount;
Render;
DrawTime := GetTickCount - StartTime;
Inc(TimeCount, DrawTime);
Inc(FrameCount);

if TimeCount >= 1000 then
begin
Frames := FrameCount;
TimeCount := TimeCount - 1000;
FrameCount := 0;
Caption := IntToStr(Frames) + 'FPS';
ErrorHandler;
end;

Done := False;
end;

procedure TForm1.Render;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //清除图像

glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45.0, ClientWidth / ClientHeight, NearClipping, FarClipping);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity;

glTranslatef(0, 0, -2); //移动坐标轴

glBegin(GL_QUADS);
glColor3f(1, 0, 0);
glVertex3f(0, 0, 0);
glColor3f(0, 1, 0);
glVertex3f(1, 0, 0);
glColor3f(0, 0, 1);
glVertex3f(1, 1, 0);
glColor3f(1, 1, 0);
glVertex3f(0, 1, 0);
glEnd;

SwapBuffers(DC);
end;

procedure TForm1.SetUpGL;
begin
glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
glEnable(GL_DEPTH_TEST); //Tiefentest aktivieren
glEnable(GL_CULL_FACE); //Backface Culling aktivieren
end;

end.

点击运行就是在一个蓝色的form里面生成一个死角带渐变色的正方形。

 

posted @ 2020-03-31 14:35  下雨天不爱打伞  阅读(201)  评论(0编辑  收藏  举报