三、一个示例程序
*************************************************************
*演示程序1,画一个圆形
*************************************************************
** 1、程序准备工作
#INCLUDE _opengl.h
&&每个文件开头部分必须包含此文件,否则出现没有定义常量的错误。
SET LIBRARY TO opengl.fll
&&项目程序初始化部分中包含就可。
DECLARE INTEGER GetAsyncKeyState IN user32 INTEGER vKey
&&键盘相关函数
************************************************************
** 2、程序数据定义或初始化
**用户根据自己程序需要做。
LcName="OpenGL For VFP演示 独狼 QQ:2775205 "+CHR(0)
&&窗口标题
lnWidth=800
&&窗口宽度
lnHeight=600
&&窗口高度
lnColor=16
&& 窗口颜色位数
lnfullscreen=0
&&=1全屏
**下面是用户定义
n = 50
R = 1
Pi = 3.1415926536
***************************************************************
** 3、创建OpenGL绘图窗口
CreateGLWindow(LcName, lnWidth, lnHeight, lnColor, lnfullscreen)
***************************************************************
** 4、对OpenGL进行所有设置,下面仅是示例。
glShadeModel(GL_SMOOTH)
&& 启用阴影平滑
glClearColor(0.0, 0.0, 0.0, 0.0)
&& 黑色背景
glClearDepth(1.0)
&&设置深度缓存
glEnable(GL_DEPTH_TEST)
&& 启用深度测试
glDepthFunc(GL_LEQUAL)
&& 所作深度测试的类型
****************************************************************
** 5、绘图以及显示(本示例画圆形。)
glClear(BITOR(GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT))
glLoadIdentity()
glTranslatef(0.0, 0.0, -5.0)
glBegin(GL_POLYGON)
FOR i=1 TO n
glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i))
next
glEnd()
****************************************************************
** 6、显示到窗口
SwapBuffers(0)
&&交换缓存
WAIT "" TO aaa TIMEOUT 5
&&暂停5秒
****************************************************************
** 7、销毁OpenGl窗口
KillGLWindow()
&& 销毁窗口
****************************************************************
** 8、关闭opengl库
RELEASE LIBRARY opengl.fll
****************************************************************
RETURN
四、编写OpenGL要注意的几个问题。(请重点关注)
1、原始函数api都是C函数接口,因此转换为vfp的时候,数据参数要符合C接口的规则。主要变现在字串处理上,C字串以\0字符结尾。因此在VFP传送字符串时字串结尾要增加0字符chr(0)。
例如:LcName="OpenGL For VFP演示 独狼 QQ:2775205 "+CHR(0)
&&窗口标题
2、C命令行以“;”号结束,VFP行尾分号是续行问题。所以要注意删除。
3、C命令以“;”号结束,因此可能一个函数分为几行,转VFP时要合并行。
4、C命令以0.0f表示数字为浮点,在VFP中要去掉“f”符号。
例子:
//C命令
glColor3f(1.0f,0.0f,0.0f); // 红色
glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上顶点 (前侧面)
--------------------------------------------
上面是C命令,改为vfp要去掉分号和注释语句,把0.0f换为0.0。
glColor3f(1.0,0.0,0.0)
&& 红色
glVertex3f( 0.0, 1.0, 0.0)
&&三角形的上顶点
5、VFP自建opengl窗口,如果不销毁,会造成VFP系统崩溃。如果程序意外退出,可在VFP窗口输入命令:= KillGLWindow()
,可以销毁OpenGl窗口。