OpenGL支持库及向导使用教程 联系客服

发布时间 : 星期五 文章OpenGL支持库及向导使用教程更新完毕开始阅读102408d184254b35eefd342f

大连大有吴涛易语言软件开发有限公司 版权所有

正投影 投影线互相平行,不论远近,大小不变 透视投影 投影线交于一点,近大远小,最远处集中到一点 对称透视投影 更加符合人眼的观察方式

“选择矩阵模式 (#观察矩阵)”:在这个矩阵中创建模型。 只要在每次可视范围发生改变的时候,重新定义投影方式就可以了。画模型的时候就不需要重新定义。

2.9.3 坐标系变换

表 8中列出了三种对坐标的命令:

表 8

命令 含义

坐标平移 保持三个坐标轴的方向不变,平行移动坐标系的愿点 坐标旋转 保持坐标系的原点不变,绕着一个指定轴转动

坐标缩放 保持坐标系的原点不变,在三个坐标轴的方向上进行缩放图 23中箭头的所指的方向是坐标旋转和坐标平移的正方向。

图 23

有关坐标缩放命令的使用方法可以参考例程“金戒指.e” 运行后可以看到图 24中效果:

图 24

也可以利用这个例程制作一个橄榄球的模型。

31

大连大有吴涛易语言软件开发有限公司 版权所有

2.9.4 矩阵运算

虽然使用坐标变换命令对矩阵进行运算比较直观,但是功能有限。直接使用矩阵运算的命令可以更加快速的对矩阵进行运算。

表 9中列出了四种对矩阵运算的命令:

表 9

命令 含义

矩阵入栈 把当前矩阵压入栈顶 矩阵出栈 把当前矩阵退出栈顶

载入矩阵 把当前坐标模式变换成指定的矩阵。

乘入矩阵 把当前坐标模式再乘以指定的矩阵使它变换成目标的矩阵。矩阵是一个4×4的数组。

矩阵的定义M[4][4]使用的是竖向的顺序,而不是大家常用的横向定义法。 M[1][1] M[2][1] M[3][1] M[4][1] M[1][2] M[2][2] M[3][2] M[4][2] M[1][3] M[2][3] M[3][3] M[4][3] M[1][4] M[2][4] M[3][4] M[4][4]

通过这些矩阵命令,可以省去计算复杂坐标变换的过程。 如果乘入矩阵 0.5 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 1.0 相当于三个轴向都缩小一半

有关坐标变换命令的使用方法可以参考例程“坐标变换.e” 可以在三种投影方式中选择一种,然后进行移动、旋转和缩放。 运行后可以看到图 25中效果:

32

大连大有吴涛易语言软件开发有限公司 版权所有

图 25

练习:

下面就来通过使用矩阵运算来实现实时阴影的效果。 1. 启动易语言OpenGL向导;

2. 在第二页“使用的组件”中选择“窗口”;

3. 在第五页“投影模式”中选择“对称透视投影”; 4. 点击完成按钮创建程序;

5. 在“框架程序集”中加入程序集变量: .程序集变量 影子, 双精度小数型, , \.程序集变量 立方体边长的一半, 小数型 .程序集变量 旋转角度

.程序集变量 光源位置, 小数型, , \6. 加入子程序“求影子”子程序: .子程序 求影子

.参数 矩阵, 双精度小数型, 参考 数组 .参数 地面, 双精度小数型, 数组 .参数 光源位置, 小数型, 数组 .局部变量 临时, 小数型 .局部变量 循环变量1

33

大连大有吴涛易语言软件开发有限公司 版权所有

.局部变量 循环变量2

临时 = 0

.计次循环首 (4, 循环变量1)

临时 = 临时 + 地面 [循环变量1] × 光源位置 [循环变量1] .计次循环尾 ()

.计次循环首 (4, 循环变量1) .计次循环首 (4, 循环变量2)

.如果 (循环变量1 = 循环变量2)

矩阵 [循环变量1] [循环变量2] = 临时 - 地面 [循环变量1] × 光源位置 [循环变量2]

.否则

矩阵 [循环变量1] [循环变量2] = -地面 [循环变量1] × 光源位置 [循环变量2]

.如果结束

.计次循环尾 () .计次循环尾 ()

7. 在“框架初始化”子程序的末尾加上 光源位置 = { -1, 2, 2, 0 } 启用功能 (#光照) 启用功能 (#材质颜色) 启用功能 (#零号光源)

设置材质 (#正面, #环境光, { 0.8, 0.2, 0.5, 1 }) 求影子 (影子, { 0, 1, 0, 0 }, 光源位置) 立方体边长的一半 = 0.5

8. 在“绘图”子程序中标有“' 在这里加入你的代码”的下面加入以下代码: 旋转角度 = 旋转角度 + 1 .如果真 (旋转角度 ≥ 360) 旋转角度 = 0 .如果真结束

坐标平移 (0, 1, -8) 坐标旋转 (45, 1, 0, 0)

坐标旋转 (旋转角度, 0, -1, 0)

设置光源参数 (#零号光源, #光源位置, 光源位置) 设置颜色 (0.9, 0.6, 0.6, 1) 设置法向量 (0, 0, 1)

开始画 (#四边形) ' 地板

设置点 (-3, -立方体边长的一半 × 2, -3) 设置点 (3, -立方体边长的一半 × 2, -3) 设置点 (3, -立方体边长的一半 × 2, 3) 设置点 (-3, -立方体边长的一半 × 2, 3) 停止画 () 矩阵入栈 ()

34