Delphi版OpenGL样例代码导游计算机等级考试

文章作者 100test 发表时间 2010:01:01 09:36:15
来源 100Test.Com百考试题网


  由于Delphi自带OpenGL.pas是1.0版的,而现在实际使用的至少是1.1版,Windows纯软件模拟方式也是1.1版的,所以要自己导入一些必要的函数。也可用一些开源的免费单元,如Mike Lischke的OpenGL12.pas。当然,自己写可以设计得更简洁,而且不必在过于超前完备的庞大代码中找错误。
  首先引入必要的单元Windows, Messages, OpenGL
  要增加一些必要的扩展。
  const
  // GL_EXT_bgra
  GL_BGR_EXT = $80E0.
  GL_BGRA_EXT = $80E1.
  // polygon offset
  GL_POLYGON_OFFSET_UNITS = $2A00.
  GL_POLYGON_OFFSET_POINT = $2A01.
  GL_POLYGON_OFFSET_LINE = $2A02.
  GL_POLYGON_OFFSET_FILL = $8037.
  GL_POLYGON_OFFSET_FACTOR = $8038.
  procedure glBindTexture(target: GLEnum. texture: GLuint). stdcall. external opengl32.
  procedure glDeleteTextures(n: GLsizei. textures: PGLuint). stdcall. external opengl32.
  procedure glGenTextures(n: GLsizei. textures: PGLuint). stdcall. external opengl32.
  function glIsTexture(texture: GLuint): GLboolean. stdcall. external opengl32.
  procedure glPolygonOffset(factor, units: GLfloat). stdcall. external opengl32.
  // 此声明用于纠正OpenGL.pas的一个bug
  function gluBuild2DMipmaps(target: GLEnum. components, width, height: GLint. format, atype: GLEnum. Data: Pointer): GLint. stdcall. external opengl32.
  现在接口已经基本升级到1.1版。如果还需要其他扩展,可类似增加。
  接下来,要创建OpenGL的绘图上下文RC,为此需要GDI窗口的设备上下文DC。TForm.Handle属性或其他TWinControl的Handle属性都是DC。可使用如下函数由DC创建RC,返回值为RC的句柄。之后即可使用OpenGL绘图。一般可在Form的OnCreate事件内使用。此函数的选项含义分别为深度缓冲区,模版缓冲区,积累缓冲区,生成Alpha通道的值。
  type
  TRCOptions = set of (roDepth, roStencil, roAccum, roAlpha).
  function CreateRC(dc: HDC. opt: TRCOptions): HGLRC.
  var
  PFDescriptor: TPixelFormatDescriptor.
  PixelFormat: Integer.
  begin
  FillChar(PFDescriptor, SizeOf(PFDescriptor), 0).
  with PFDescriptor do
  begin
  nSize := SizeOf(PFDescriptor).
  nVersion := 1.
  dwFlags := PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or PFD_DOUBLEBUFFER.
  iPixelType := PFD_TYPE_RGBA.
  cColorBits := GetDeviceCaps(DC, BITSPIXEL) * GetDeviceCaps(DC, PLANES).
  if roDepth in opt then cDepthBits := 24.
  if roStencil in opt then cStencilBits := 8.
  if roAccum in opt then cAccumBits := 64.
  iLayerType := PFD_MAIN_PLANE.
  end.
  PixelFormat := ChoosePixelFormat(DC, @PFDescriptor).
  Assert(PixelFormat

相关文章


一个C 程序员的Delphi学习笔记计算机等级考试
计算机二级辅导:Delphi编程规范1.0.0.0计算机等级考试
在Delphi中使用指针参数计算机等级考试
DELPHI中回调函数的使用计算机等级考试
Delphi版OpenGL样例代码导游计算机等级考试
DELPHI8操作符重载的例子计算机等级考试
Delphi实现对注册表的监视和扫描计算机等级考试
使用Delphi创建IIS虚拟目录计算机等级考试
计算机二级辅导:增强MIDAS的安全性计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛