| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 905 人关注过本帖, 1 人收藏
标题:VFP9 三维动画演示
只看楼主 加入收藏
hepu
Rank: 2
等 级:论坛游民
帖 子:62
专家分:27
注 册:2011-12-16
结帖率:25%
收藏(1)
 问题点数:0 回复次数:6 
VFP9 三维动画演示
图片附件: 游客没有浏览图片的权限,请 登录注册

demogl.rar (13.44 KB)

说明,没有恶意代码,360误报opengl.fll库。
搜索更多相关主题的帖子: 三维动画 
2013-05-09 22:45
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11771
专家分:43421
注 册:2006-5-13
收藏
得分:0 
感兴趣。但这毕竟不是VFP的强项,个人认为没有必要强人所难。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-05-09 23:05
hepu
Rank: 2
等 级:论坛游民
帖 子:62
专家分:27
注 册:2011-12-16
收藏
得分:0 
OpenGL For Visual Foxpro9
OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。
OpenGL不是语言,是专业的图形程序接口。现在Windows系统的主流编译环境有Visual C++/C#,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。今天我把他移植到了Visual Foxpro9中,为喜爱图形设计的狐友带来福音。
OpenGL原函数为C函数,我们通过FLL库,封装到了opengl.fll库中,大多数函数的名称和定义都和原C函数相同,因此具有很强的移植性。
一般编程语言必须先编译再运行,调试麻烦。VFP有先天的优势,边解释边运行。可以说,程序编写完成就可以通过DO命令运行程序。
    OpenGL在VFP怎么运行呢?下面我给大家介绍。
一、    准备工作
1、在我们程序工作的目录下复制这2个文件。
_opengl.h   
opengl.fll
     2、准备OpenGL程序设计
         在程序的开头部分,一般包含下面2条命令。
#INCLUDE _opengl.h    &&每个文件开头部分必须包含此文件,否则出现没有定义常量的错误。
SET LIBRARY TO opengl.fll  &&项目程序初始化部分中包含就可。
     3、OpenGL程序框架
        ** 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全屏
** 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、绘图以及显示

** 6、显示到窗口
SwapBuffers(0)  &&交换缓存 (双缓存)
        ** 7、销毁OpenGl窗口
             KillGLWindow()  && 销毁窗口
        ** 8、关闭opengl库
RELEASE LIBRARY opengl.fll
2013-05-14 21:27
hepu
Rank: 2
等 级:论坛游民
帖 子:62
专家分:27
注 册:2011-12-16
收藏
得分:0 
三、一个示例程序
*************************************************************
*演示程序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窗口。

2013-05-15 21:45
hepu
Rank: 2
等 级:论坛游民
帖 子:62
专家分:27
注 册:2011-12-16
收藏
得分:0 
OpenGL_VFP.rar (9.47 KB)
2013-05-15 21:45
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
非常支持:楼主对vfp 的应用方面,进行的扩展!!精神和技术都值得学习!
2013-05-17 23:18
y148y
Rank: 2
等 级:论坛游民
威 望:1
帖 子:26
专家分:11
注 册:2013-6-23
收藏
得分:0 
感谢提供这么好的学习材料!
2014-02-09 23:23
快速回复:VFP9 三维动画演示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017839 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved