在TForm中应用OpenGL
来源:互联网 发布:dede游戏网站源码 编辑:程序博客网 时间:2024/06/04 18:57
一 新建一工程,设保存为OpenGLApp.dpr,窗口为Form1
二 在Form1中加入Panel1和Button1,unit1.pas代码为
unit Unit1;
interface
uses
Windows,messages,Sysutils,classes,graphics,controls,Forms,Dialogs,OpenGL,Exectrs,Stdctrls;
type
TForm1=class(TForm)
Panel1:TPanel;
Button1:TButton;
procedure FormCreate(Sender:TObject);
procedure PanelResize(Sender:TObject);
procedure FormDestroy(Sender:TObject);
procedure FormKeyPress(Sender:TObject;var key:char);
procedure Button1Click(Sender:TObject);
private
rc:HGLRC;
dc:HDC;
ElapsedTime,AppStart,LastTime:dword;
procedure glDraw;
procedure Idle(Sender:TObject;var Done:boolean);
public
end;
var
Form1:TForm1;
implementation
{$R *.DFM}
procedure TForm1.glDraw()
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0,0,-4);
glRotatef(ElapsedTime/10,0,1,0);
glBegin(GL_TRIANGLES);
glColor3f(1,00); glVertex(-1,-1,0);
glColor3f(0,10); glVertex(1,-1,0);
glColor3f(0,0,1); glVertex(0,1,0);
glEnd()
end;
//OpenGL初始化
procedure glInit()
begin
glClearColor(0.0,0.0,0.0,0.0);
glShadeModal(GL_SMOOTH);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glHint(GL_DEPSPECTIVE_CORRECTION_HINT,GL_NICEST);
end;
procedure TForm1.FormCreate(Sender:TObject);
var pfd:TPIXELFormatDescriptor;
pf:integer;
begin
dc :=GetDC(Panel1.Handle);
pfd.nSize :=sizeof(pfd); //让Panel1获取句柄
pfd.dwFlags:=PFD_DRAW_TO_WINOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER or 0);
pfd.ColorBits :=32;
pf :=ChoosePixelFormat(dc,@pfd);
SetPixelFormat(dc,pf,@pfd);
rc :=wglCreateContext(dc);
wglMakeCurrent(dc,rc);
glInit;
PanelResize(Sender);
AppStart :=GetTickCount();
Application.OnIdle :=Idle;
end;
procedure TForm1.FormDestroy(Sender:TObject);
begin
wglMakeCurrent(0,0);
wglDeleteContext(rc);
end;
procedure TForm1.Idle(Sender:TObject;var Done:Boolean);
begin
Done :=False;
LastTime :=ElapsedTime;
ElapsedTime :=GetTickCount()-AppStart;
glDraw();
SwapBuffers(DC);
end;
procedure TForm1.Resize(Sender:TObject);
begin
glVewport(0,0,Penel1.Width,panel1.Height);
glMatrixMod(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,0,Panel1.Width/Panel1.Height,1,0,500.0);
glMatrixMode(GL_MODEVIEW);
end;
procedure TForm1.FormKeyPress(Sender:TObject;var Key:char);
begin
if key=#27 then
Close;
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
Close;
end;
end.
- 在TForm中应用OpenGL
- [CB]TForm应用技巧
- Delphi中在TForm绘图时使用DoubleBuffered实现双缓冲的副作用
- 使继承于TForm 的 Published 属性和方法出现在 Object Inspector 中
- Delphi 中Tform的visible属性详解
- iOS中OpenGL应用
- OpenGL在IOS中的应用
- 在OPENGL中使用光照
- 在OPENGL中显示中文
- 在JAVA中使用OpenGL?!
- 在wxPython中使用OpenGL
- 在windows中配置OpenGL
- 在openGL中实现RayPicking
- 在SDL中使用OpenGL
- 在VS中配置OpenGL
- openGL在surfaceview中实例
- 在VC中使用OpenGL
- OpenGL在MFC中配置
- ADO连接池和TADOStoreProc动态参数调用
- 程序员教父John Carmark——连比尔.盖茨都欣赏的天才
- 测试PHP
- 用 Adplus 自动获取 dump
- Oracle语句优化30个规则详解(三)
- 在TForm中应用OpenGL
- (转载)WPARAM与LPARAM
- 网格动画
- windows延缓写入失败的处理
- JavaCC学习心得(一)
- 在Flex项目中使用Flash媒体组件播放视频
- 定义云计算市场
- 关于g_object_get_data和g_object_set_data
- 学习使用PIVOT