大连大有吴涛易语言软件开发有限公司 版权所有
图 8
命令“设置颜色索引 (颜色索引号)”只有在颜色索引模式下才能使用。也是用来设定图元的颜色的。不同是颜色由索引表来指定,不能使用颜色索引表以外的颜色。
有关颜色索引的使用方法可以参考例程“索引颜色.e” 调整颜色和灰度的数值可以看到索引颜色的变化效果。 运行后可以看到图 9中效果:
图 9
另外使用命令“设置明暗模式(模式)”可以让颜色变得连续或不连续。
练习:
15
大连大有吴涛易语言软件开发有限公司 版权所有
下面就来画一个颜色渐变的三角形。 1. 启动易语言OpenGL向导;
2. 在第六页“其他选项”中指定背景颜色为白色; 3. 点击完成按钮创建程序;
4. 在“绘图”子程序中加入变量; .局部变量 角, 双精度小数型
5. 在“绘图”子程序中标有“' 在这里加入你的代码”的下面加入以下代码: 开始画 (#扇形三角形) 设置颜色 (1, 1, 1, 1) '设置为白色 设置点 (0, 0, -1) 角 = 0 设置颜色 (1, 0, 0, 1) '设置红色 设置点 (100 × 求正弦 (角), 100 × 求余弦 (角), -1) 角 = 120 ÷ 180 × #pi 设置颜色 (0, 1, 0, 1) '设置绿色 设置点 (100 × 求正弦 (角), 100 × 求余弦 (角), -1) 角 = 240 ÷ 180 × #pi 设置颜色 (0, 0, 1, 1) '设置蓝色 设置点 (100 × 求正弦 (角), 100 × 求余弦 (角), -1) 角 = 0 设置颜色 (1, 0, 0, 1) '设置红色 设置点 (100 × 求正弦 (角), 100 × 求余弦 (角), -1) 停止画 () 参考例程“第四课练习.e” 运行后可以看到图 10中效果:
图 10
第五节、显示列表
在有些时候,大家需要频繁地画同样的模型。如果每次都重新执行所有的命令,就会让程序的运行效率变得很低。这样的情况下就要用到显示列表。
16
大连大有吴涛易语言软件开发有限公司 版权所有
显示列表是把一组命令预先处理成更适合于图形硬件的结构并保存起来,需要调用列表的时候再执行它。采用显示列表方式绘图通常可以提高显示的速度,但是列表一旦建立,就不能修改。
2.5.1 使用显示列表的一般过程:
生成列表号→开始创建列表→停止创建列表→调用列表→删除列表列 “生成列表号”命令可以产生一个没有被使用过的列表号。 “开始创建列表”命令在指定的列表号里保存下面紧接着的OpenGL命令,如果指定的列表号已经存在,原来的显示列表会被替换掉。
“停止创建列表”命令说明创建工作到此结束。 “调用列表”命令执行列表中的所有OpenGL命令。 “删除列表列”命令删除列表是为了节省系统资源。一个列表号被删除后,就又会在“生成列表号”中出现了。
表 4中说明了使用显示列表和子程序的区别:
表 4
显示列表 子程序 #编译
调用方式 或 直接调用
#编译后调用
嵌套 允许在创建过程中调用其他列表 允许在子程序内部调用其他子程序 效率 高 一般 变量值改变 使用在创建时候的数值 允许改变 需要删除 要 不要 有关显示列表的使用方法可以参考例程“显示列表.e” 运行后可以看到图 11中效果:
图 11
17
大连大有吴涛易语言软件开发有限公司 版权所有
练习:
下面就来运用一下显示列表。 1. 启动易语言OpenGL向导; 2. 点击完成按钮创建程序;
3. 在“框架程序集”中加入程序集变量: .程序集变量 列表号, 整数型
4. 在“框架初始化”子程序的末尾加上以下代码: 列表号 = 生成列表号 (1)
开始创建列表 (列表号, #编译列表) 设置颜色 (1, 0, 0, 1) ' 设置为红色 画圆子程序 ({ 0, 0, -1 }, 100) ' 第一圈 设置颜色 (0, 1, 0, 1) ' 设置为绿色
画正多边形子程序 ({ 0, 0, -1 }, 100, 4) ' 正方形 设置颜色 (0, 0, 1, 1) ' 设置为蓝色 画圆子程序 ({ 0, 0, -1 }, 70.7) ' 第二圈 设置颜色 (1, 1, 0, 1) ' 设置为黄色
画正多边形子程序 ({ 0, 0, -1 }, 70.7, 4, 45) ' 正方形 停止创建列表 ()
5. 在“绘图”子程序中标有“' 在这里加入你的代码”的下面加入以下代码: 调用列表 (列表号) 参考例程“第五课练习.e” 运行后可以看到图 12中效果:
图 12
第六节、光照、材质
在OpenGL中使用光照和材质的效果可以让模型看起来更加逼真和真实。 在OpenGL简单光照模型中的非透明模型的颜色由环境光、漫反射光、镜面光以及它自身的材质决定。
环境光是由光源发出经环境多次反射而无法确定其方向的光,感觉就象太阳光,白天的
18