知识大全 用Delphi进行OpenGL编程学习心得
Posted 设备
篇首语:不怕路长,只怕志短。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Delphi进行OpenGL编程学习心得相关的知识,希望对你有一定的参考价值。
用Delphi进行OpenGL编程学习心得 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在开发图形程序时 尤其是三维的图形程序 因为感觉OpenGL没有DirectX那么庞杂 所以选择了DelphiOpenGL 凭感觉而言 Delphi也没有C++那么繁杂而且更加人性化 于是选择Delphi+OpenGL进行工作 在这过程中 碰到(肯定会)一些问题 在此提出希望和朋友们能够进行交流首先是初始化 初始化时 有几项工作需要进行 ①创建设备描述表(Device Context) (注 关于DC 各种资料译文不尽相同如设备环境 设备描述表 设备上下文等 但好象都不太贴切 要是能有李善兰这样的翻译就好了 下文中的RC情形相同) ②设置相应的象素格式(PIXELFORMAT DESCRIPTOR) ③创建着色描述表(Rendering Context) Delphi中有好几种获得或创建设备描述表的方法 最简单的就是直接获得画布对象(TCanvas)的句柄属性(Handle) 如
DC HDC DC =Canvas Handle
也可以用API函数GetDC获得设备描述表 如
DC =GetDC(Handle DC) 也可以用函数CreateCompatibleDC或者BeginPaint EndPaint(需要注意它们之间的区别)等来获得设备描述表 但是设备描述表用完之后要记得释放或删除它 以解放资源的占用 拥有设备描述表的使用权后 就可以设置相应的象素格式 象素格式是个记录类型 其中有些字段或域是没什么用处的(至少现在是) 象素格式描述完成后 调用ChoosePixelFormat和SetPixelFormat函数将之与设备描述表进行匹配和设置 如下面代码
function SetupPixelFormat(var dc:HDC):Boolean;varppfd:PPIXELFORMATDESCRIPTOR;npixelformat:Integer;beginNew(ppfd);ppfd^ nSize:=sizeof(PIXELFORMATDESCRIPTOR);ppfd^ nVersion:= ;ppfd^ dwFlags:=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;ppfd^ dwLayerMask:=PFD_MAIN_PLANE;ppfd^ iPixelType:=PFD_TYPE_COLORINDEX;ppfd^ cColorBits:= ;ppfd^ cDepthBits:= ;ppfd^ cAccumBits:= ;ppfd^ cStencilBits:= ;npixelformat:=ChoosePixelFormat(dc ppfd);if (nPixelformat= ) thenbeginMessageBox(NULL choosePixelFormat failed Error MB_OK);Result:=False;Exit;end;if (SetPixelFormat(dc npixelformat ppfd)= FALSE) thenbeginMessageBox(NULL SetPixelFormat failed Error MB_OK);Result:=False;Exit;end;Result:=True;Dispose(ppfd);end; 也可以向下面这样进行设置如 var pfd: PixelFormatDescriptor;nPixelFormat : Integer;beginFillChar(pfd SizeOf(pfd) );with pfd dobeginnSize:=sizeof(pfd);nVersion:= ;dwFlags:=PFD_SUPPORT_OPENGL or PFD_DRAW_TO_BITMAP or PFD_DOUBLEBUFFER;iPixelType:=PFD_TYPE_RGBA;cColorBits:= ;cDepthBits:= ;iLayerType:=Byte(PFD_MAIN_PLANE);end;nPixelFormat:=ChoosePixelFormat(DC @pfd);SetPixelFormat(DC nPixelFormat @pfd); // 使用DescribePixelFormat检查象素格式是否设置正确DescribePixelFormat(DC nPixelFormat SizeOf(pfd) @pfd);if (pfd dwFlags and PFD_NEED_PALETTE) < > then SetupPalette(DC pfd);//SetupPalette是自定义函数 end 上述工作完成以后 最好先运行一遍 并检查nPixelFormat的值 正常的话 该值应该是大于 的 否则就有问题 同样的代码 我在NT机器上能够得到正确的大于 的值而在PWIN 或 的机器上得不到正确值 但是编译时不会有问题 而且NT上编译后在PWIN 机器上也能够正确运行 现在可以创建着色描述表(RC)了 调用函数wglCreateContext wglMakeCurrent 如下例所示
RC HGLRC RC:=wglCreateContext(DC);wglMakeCurrent(DC RC); 在程序结束之前 要记得释放所占用的资源 wglMakeCurrent( );if RC< >null thenwglDeleteContext(RC);if ghDC< >null thenReleaseDC(Handle DC); 以下的代码是从C++Builder 中OpenGL的例子改写过来的 编译后的程序大小为 K左右 而在C++Builder 下编译后程序的大小为 K
< a href= zip >程序代码 Zip KB
cha138/Article/program/Delphi/201311/8539相关参考
知识大全 OpenGL + VS C++ 2010编程环境搭建
OpenGL+VSC++2010编程环境搭建 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文
用Delphi编程模拟鼠标操作 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本实例介绍如何在自己的
用Delphi编程访问SQLServer数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! De
用Delphi编程教你制作点歌台 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
用DELPHI编程访问SQLSERVER数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! D
Delphi控制Excel2000心得 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一使用动态
编程技术分享:Hibernate开发心得 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! hibe
学习JAVA游戏开发要用什么软件编程? 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!学习JAVA游戏
知识大全 学经济类的朋友,能不能交流一下学习高级财务会计的收获或学习心得
学经济类的朋友,能不能交流一下学习高级财务会计的收获或学习心得!1,目前从事高级财务会计工作的人都是比较吃香的,只要学的好,可以用合法手段为公司节约很大一笔开支,俗话说,“开源节流”,对于成本型的企业
DELPHI基础教程:Delphi拖放编程[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!