在TForm中应用OpenGL

简介: 一 新建一工程,设保存为OpenGLApp.dpr,窗口为Form1 二 在Form1中加入Panel1和Button1,unit1.pas代码为 unit Unit1; interface uses Windows,messages,Sysutils,classes,graphics,c...

一 新建一工程,设保存为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.

相关文章
|
缓存 索引
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
|
Android开发
Android官方开发文档Training系列课程中文版:OpenGL绘图之应用投影与相机视图
原文地址:http://android.xsoftlab.net/training/graphics/opengl/projection.html##transform 在OpenGL ES环境中,投影相机View可以将所绘制的图形模拟成现实中所看到的物理性状。
1211 0
|
Android开发
使用OpenGL开发Android应用详解系列三
注:近三篇转载中的视锥体部分结合着来看,再参照老罗的3d变换,基本可以初步理解和完成相关视锥体调整。 使用OpenGL开发Android应用详解系列三 【原创】转载请注明出处 我一家网 http://www.5yijia.com 前面两节主要介绍了一下OpenGL的基本概念,以及在Android开发中引入OpenGL时,Android项目的基本构成情况。
1078 0
|
Android开发 开发工具 HTML5
关于Android平台中OpenGL ES应用的初步研究
关于Android平台中OpenGL ES应用的初步研究 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
1144 0
|
7月前
|
XML 小程序 Java
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
138 0
|
缓存 C++
Opengl ES之FBO
Opengl ES连载系列
157 0
|
存储 编解码 算法
Opengl ES之LUT滤镜(上)
Opengl ES之连载系列
471 0
|
数据安全/隐私保护 开发者
OpenGL ES 多目标渲染(MRT)
Opengl ES连载系列
331 0
|
数据安全/隐私保护 索引
Opengl ES之纹理数组
Opengl ES连载系列
264 0
下一篇
DataWorks