大连大有吴涛易语言软件开发有限公司 版权所有
绘图子程序框架代码如下:
上述代码中“清除缓存”命令是使用背景色将屏幕清除,所有先前画出来的东西都被抹去了。(有关缓存操作的内容可以查看第十四节的内容)
“矩阵复位”命令是将坐标还原到原点。(有关坐标的内容可以查看第九节的) “交换缓存”命令是在双缓存模式下才有,是将后台画面显示出来。 这里没有显示任何画面,因为没有加入绘图代码。后面几节内容中将主要介绍如何在这个子程序中添加语句来显示效果。
2.1.6 确定显示范围
当组件尺寸可以被用户任意调整大小时,为了让OpenGL设备场景大小也同时随之改变需要调用“尺寸被改变”子程序。
“尺寸被改变”子程序在“建立OpenGL组件”子程序运行之后“绘图”子程序运行之前起码运行一次,尤其是在窗口或组件的大小被改变的时候再次运行。
第一、二句“如果真”和“高度=1”防止被除数高度为0,如果高度为0就将它改为1。 第三句“设置视口”命令指定了设备中可以显示的范围。
第四句“选择矩阵模式”命令说明接下来将要进行操作的坐标矩阵为“#投影矩阵”。通常将投影坐标的变换都放在这个矩阵中。
第五句“矩阵复位”命令将上次设置的坐标矩阵的坐标还原到原点。
第六句“创建正投影”命令是建立一个正投影的坐标环境,画面的最左边的坐标值为—0.5,最右边为+0.5,最下面为—0.5,最上面为+0.5,离屏幕最近的距离为屏幕后面+0.1,最远的距离为屏幕后面+100。
7
大连大有吴涛易语言软件开发有限公司 版权所有
第七句“选择矩阵模式”命令又将接下来将要进行操作的坐标矩阵设置为“#观察矩阵”,我们画图的内容都放在这个矩阵中。
第八句“矩阵复位”命令将上次设置的坐标矩阵的坐标还原到原点。
2.1.7 OpenGL初始化
“框架初始化”子程序是为了初始化OpenGL,它在“建立OpenGL组件”子程序运行之后只运行一次,保证一些常用的OpenGL命令被赋予了编程者希望的状态值。
去掉本子程序只会改变OpenGL的显示效果,不会危及整个应用程序的运行。
第一句“清除颜色缓存”命令为OpenGL设备场景设置背景颜色。(有关颜色的内容可以查看第四节的内容)
第二句“设置阴影模式”命令说明阴影为光滑模式。
第三句“清除深度缓存”命令指定清除视口范围里的深度缓存。只能使用在[0,1]范围内的数值。所观察物体的最前面为0,最后面为1。
第四句“启用功能”命令打开深度测试的状态开关
第五句“深度测试”命令与第三句组合得到一个测试条件(即“<1”),将所有满足这个条件的物体都显示在屏幕上。
第六句“设置画面质量”命令设置透视画面的显示质量为最好。
练习:
下面就按步骤建立一个最简单的OpenGL应用程序。 1. 启动易语言OpenGL向导; 2. 直接点击完成按钮创建易程序;
3. 在“绘图”子程序中标有“在这里加入你的代码”的下面加入以下代码: 画圆子程序 ({ 0, 0, -1 }, 100)
上述代码表示以空间坐标点(X = 0,Y = 0,Z = —1)为圆心,100为半径画出一个圆。 参考例程“第一课练习.e” 运行后可以看到图 2中效果:
8
大连大有吴涛易语言软件开发有限公司 版权所有
图 2
第二节、空间定位
OpenGL的坐标系统与屏幕的坐标不同,却和日常生活空间很相似。让我们来观察一下二维坐标系与三维坐标系的区别。
下面是一个画板的二维坐标系。
图 3中的X轴通常叫做横向位置,Y轴通常叫做纵向位置,使用的单位通常为象素,坐标原点始终在画板的左上角。
图 3
下面是一个OpenGL的三维坐标系的原始状态。
图 4中的X轴在支持库中叫做横向位置,Y轴通在支持库中叫做竖向位置,Z轴在支持库中叫做纵向位置,使用的单位要根据程序来定,未经移动的坐标原点在屏幕中间,必要时也可以根据程序自己移动坐标原点的位置。正因为比画板的二维坐标系多出一根Z轴,OpenGL才可以画出一个三维的图形。
9
大连大有吴涛易语言软件开发有限公司 版权所有
图 4
空间坐标每次移动的距离及旋转角度都是累加的。 比如:
坐标平移 (0,1, 0) 坐标平移 (1, 0,0)
坐标旋转 (10, 1, 0, 0) 坐标旋转 (10, 0, 1, 0)
最后得到的坐标原点就是(1,1,0),旋转的角度为横向位置先向右旋转10度然后竖向位置再向上旋转10度。
练习:
下面就通过画一个的三角形来理解空间的定位。 1. 启动易语言OpenGL向导; 2. 点击完成按钮创建程序;
3. 在“绘图”子程序备注中标有“' 在这里加入你的代码”的下面加入以下代码: 坐标平移 (0, 0, -1)
将坐标原点向屏幕里面移动一个单位的距离,只有在屏幕里面才能显示出来,否则无法显示。0为屏幕位置。
开始画 (#三角形)
设置接下来的“设置点”命令是要画出一个三角形。 设置点 (0, 100, 0)
当前坐标X = 0,Y = 100,Z = 0,实际坐标为X = 0,Y = 100,Z = —1,三角形的最
10