C语言+OpenGL的两个画图框架

期末快到了,最近在做课程实验,用鼠标点击画各种曲线,平台是VC+OpenGL。画曲线虽然要求不能用OpenGL自带的函数,但是书里的数学推导也差不多,在开始之前遇到的问题就是"点点",老师原话,即在屏幕上点下鼠标,就画一个点。其实这是实验的框架,这个解决了,后面图就好画了。

卖点关子,一开始我们用OpenGL画过正方体旋转打开一面什么的,现突然间要实现"点点",试了一下觉得问题不简单。首先是单位和坐标不同,屏幕是以像素为单位,OpenGL的一单位可没有绝对的多长,相对的;屏幕的左上角是原点,OpenGL的窗口中间是原点,这样出现的问题就是鼠标点的点和显示的点会有偏移。接着是维度不同,屏幕是2维,OpenGL是3维,深度没法用鼠标表示,除非默认是屏幕那个平面或是一条直线(即深度任意)。

找了些天,得到同学的提醒,知道用Glut或是用glUnProject函数。搜索和总结了一下,重点下面说,并把框架上传到网上。

GLUT

GLUT是对OpenGL的封装,它最大的特点就是跨平台,Windows和Linux均支持,在使用它之前,必须先下载它的头文件和库。在这里下载:http://www.xmission.com/~nate/glut.html 选择那个117KB的压缩包,下完解压会得到三个文件,把glut.h复制到VC的安装目录下\VC98\Include\GL文件夹里;把glut32.lib复制到VC安装目录下\VC98\lib,把glut32.dll复制到C:\WINDOWS\system目录下。

接下来我就不多说了,直接下载我打包的程序,用VC6打开,里面有详细的注释。关于GLUT函数库,可以查看这个,不错。

VC WIN API+OPENGL

上面的框架是用GLUT实现的,实际是在控制台console里调出GLUT的函数库来绘制图形的,它无法加入MFC或WINAPI的函数库或类库,好比方说弹出对话框这功能。下面这种方法核心就是用glUnProject这个函数,简单说它就是将屏幕上的鼠标点击产生的(x,y)坐标映射到OpenGL里的世界坐标,使得点在哪就能显示在哪,解决鼠标点击偏移的问题。

同样不多说,直接附上框架,框架代码来自网络,由于网上文章大部分雷同且只给代码段,不利于新手使用,我打包成一个函数并加在框架里,此外增加了控制台输出,里面有详细的注释。

下载地址http://code.google.com/p/pugwoo/downloads/list 选择里面的glutPaint.7z文件和OpenGL画板框架.7z文件。

效果图

2009-11-26 9-47-05.png

转载请注明:来自pugWoo's Life
本文地址:http://www.pugwoo.com/2009/11/26/c-opengl-paint.html



2 条评论

我要留言