在导入地形数据库时,首先在gvsint.gvc中将地形模型定义给一个对象,在本系统中记为TERRAIN,具体为:
import file=$VILLAGE/terrain.gvm \
name=TERRAIN structure=on \geometry=on
然后在程序中将地形调入进去,具体为:
GV_obi_instance_by_name( "TERRAIN", &terrain );//为对象取名
GV_scn_add_object( scene, terrain );//将地形加入到场景当中
这样也就将一个地形文件加入到场景中了。
加入前后的场景画面对比如图4.3和图4.4:
图4.3 加入地形前场景图
图4.4 加入地形后场景图
4.2.2 汽车模型的导入
汽车模型在虚拟汽车驾驶模拟系统开发中相当于现实世界中的汽车。它是现实世界汽车在虚拟世界的反应。但是加入汽车模型,务必的注意他的纹理,否则导入的汽车模型是不完整的。
纹理工具为载入和使用纹理图提供一个高级界面。纹理图存储在磁盘上,你的视觉应用软件可能要使用它。输入数据库时可能包含纹理映射需求,此时GVS使用纹理工具。用户也可访问GVS所使用的纹理图输入函数。它们可能需要将自己的纹理图读入GVS,这样能用低级OpenGL调用作纹理映射。
首先将汽车模型加入到场景中,调用函数GV_scn_add_object将汽车模型加入到场景中,关键代码为:
import file=flt/jeep.flt name=OWN_VEHICLE
现在gvsint.gvc中将汽车模型赋给对象OWN_VEHICLE;
然后在程序中添加汽车模型:
GV_scn_add_object( scene, model );//将汽车模型加入到场景中
Model代表汽车模型。
此时汽车模型已经加入到场景里了,但它是没有纹理的。
4.5 汽车模型图
图4.6 加入纹理前
用MultiGen-Paradigm软件打开汽车模型图,对其加入纹理。如图4.7,修改list Textures中得路径即可。
图4.7 修改纹理路径
图4.8 加入纹理后效果图
4.2.3 房子实体导入
房子实体的导入与汽车模型的导入原理是基本相同的,其关键代码为:
import file=flt/farmhouse.flt name=FARMHOUSE
在gvsint.gvc中将房子模型赋给对象FARMHOUSE。
然后在程序中将房子加入到地形中:
GV_obi_instance_by_name( "FARMHOUSE", &farmhouse );//为对象取名
GV_scn_add_object( scene, farmhouse );//将房子加入到场景当中
但这样加入房子实体是没有纹理的,其运行的效果图如图4.9:
图4.9 房子实体效果图
用MultiGen-Paradigm软件打开房子模型图,对其加入纹理。如图4.10,修改list Textures中得路径即可。
图4.10 房子实体加入纹理路径
图4.11 修改纹理路径后房子实体效果图
4.3 鼠标的控制
利用鼠标控制汽车前进比用键盘控制汽车前进更加灵活,可以使汽车沿着任何一个方向前进。同时可以利用鼠标控制汽车的速度。
鼠标控制汽车前进的关键技术是实时获取鼠标的位置,OpenGVS为我们提供了特定的函数GV_chn_inq_cursor_position( channel, &cursor),其中cursor记录着鼠标的位置。通过获知鼠标位置的变化情况,反馈到汽车上,将两者之间建立一种关联关系。
在本系统中,汽车的速度由鼠标的高度决定,即driving_speed = max_driving_speed * cursor.y * cursor.y * cursor.y,汽车的方向由鼠标的x姿态角决定rotation = max_rotation * cursor.x * cursor.x * cursor.x。
具体的关键代码为:
/获取鼠标的属性,包括位置和角度/
GV_chn_inq_cursor_position( channel, &cursor);//获取鼠标坐标 基于OpenGVS的虚拟汽车驾驶模拟系统的开发(9):http://www.youerw.com/tongxin/lunwen_1612.html