Bcb中使用Opengl的学习经历

Bcb中使用Opengl的学习经历

ID:37908600

大小:174.00 KB

页数:9页

时间:2019-06-02

Bcb中使用Opengl的学习经历_第1页
Bcb中使用Opengl的学习经历_第2页
Bcb中使用Opengl的学习经历_第3页
Bcb中使用Opengl的学习经历_第4页
Bcb中使用Opengl的学习经历_第5页
资源描述:

《Bcb中使用Opengl的学习经历》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Bcb中使用Opengl的学习经历作者:太乙散数摘要:用一个简单的例子,阐述了bcb中使用opengl的简单方法,包括初始化框架、旋转和平移图形、清除图像、初始化背景色以及在刷新时保持图像。关键词:bcb6opengl旋转清除平移到今天,终于把bcb6中应用Opengl的基本流程等弄清楚了,想想学之费时费力,特总结出来让后来者方便!网上有很多Opengl应用的书和帖子,我也从中吸取了很多经验,但总感觉这些书和帖子没有把新手最想知道的最基础的东西讲明白。为了浅显易懂,以一个例子来讲整个流程。首先创建一个新的Form(Form1在后面的代码中我是这么定义的),然后在上面放置一个pane

2、l(Panel1)和7个Button(具体见图1)。其中,Button1是绘图按钮,button2是清除按钮,button3是平移图像按钮,button4~7分别左旋、右旋、上旋、下旋按钮(担心图片不能上传,故唠叨几句)。这个例子的功能就是:在panel1上用opengl绘图,然后用7个button操作图形。图1opengl应用实例下面介绍具体的操作流程:1)设置opengl的绘图环境。在bcb6中,只需在头文件中加入#include、#include两个命令即可。2)设置hDC,即绘图区的句柄或指针,目的使程序知道你想在那那个区域绘画。首先需

3、要在头文件中声明HDChDC,然后在TForm(Owner)函数下面初始化,本文的绘图区为Panel,所以hDC=hDC=GetDC(Form1->Panel1->Handle);接着要对hDC的像素格式进行设置,SetDCPixelFormat(hDC),其实初学者大可不理会这个函数。3)设置RC(RenderingContext),老妖翻译为“图像操作描述表”,很晦涩。我认为就是与Opengl的绘图功能连接的一个通道,建议翻译为“背景通道”。首先要在头文件中声明HGLRChRC;然后在TForm(Owner)函数下面初始化,要紧跟在hDC初始化之后:hRC=wglCreateC

4、ontext(hDC);wglMakeCurrent(hDC,hRC)。hRC只在此处有使用,后面就不会应用到。4)在bcb中还有个比较特别的函数需要提前声明,那就是void__fastcallTForm1::IdleLoop(TObject*,bool&done),这个函数的功能就是控制屏幕刷新时绘图区的的情况。这个函数是个自定义函数在头文件中需要先声明。然后把Application->OnIdle=IdleLoop放入TForm(Owner),要放在第一句。这样就可以调用这个IdleLoop函数,为什么这样能调用,我不是很明白?可参考bcb中自带的opengl例子。5)在绘图之

5、前,还得对初始化的量hRC、hDC进行关闭设置,在FormDestroy(TObject*Sender)函数中设置。6)opengl绘图。我把opengl的绘图语句放在button1的单击事件里。首先清除背景色,或者说叫重设背景色:glClearColor(0.5,0.7,0.9,1.0)、glClear(GL_COLOR_BUFFER_BIT);然后用glBegin和glEnd之间语句绘图;最后刷新缓存SwapBuffers(hDC)。后面的程序把绘图语句全放入RenderScence()函数里,所以在Button1Click(TObject*Sender)函数中只需调用Rend

6、erScence()。注:要保证绘图后图形一直存在,除非自己清除,那么就必须在IdleLoop函数写入if(Sender==Button1)Button1Click(Sender);7)很简单吧,图像能够绘制了!然后就需要对图像进行操作设置了。首先清除图像,只需在button2中重新刷新背景色;然后平移图像,只需在button3中写入glTranslatef(0.25,0,0)(这个命令的意思是将图形右移动0.25个单位。有时在0.25后加f,即0.25f,是指0.25是一个float类型的数),注意接着要重新画图形即调用RenderScence()。左右上下旋转与此雷同,就不一一

7、介绍了。旋转的函数为glRotatef(-5,1.0,0.0,0.0)(这个命令的意思是向上旋转5°,也就是说你点击一下,即向上旋转5°)。8)文中还有一个功能,就是在一开始就把panel1的背景色绘上,但不绘图。要实现这功能,必须FormCreate(TObject*Sender)、FormPaint(TObject*Sender)配合使用,为什么要这样未搞清楚!9)很好,可以画图,可以简单操作了。后续还有很多工作要做,比如窗口的设置、光源的设置、图像的大小设置等等

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。