/创建camera_own_vehicle相机资源/
GV_Camera camera_own_vehicle;
GV_obi_inq_by_name( "OWN_VEHICLE", &own_vehicle );//对象命名
GV_cam_create( &camera_own_vehicle);//创建对象
GV_cam_set_name( camera_own_vehicle, "OWN_VEHICLE" );
GV_cam_add_platform( camera_own_vehicle);//加入平台内
{
GV_cam_add_mountable_obi( camera_own_vehicle, own_vehicle );
GV_cam_set_mount_obi( camera_own_vehicle, own_vehicle );
}
/设置相机位置/
static G_Position eyepoint_pos = {0.0, 50.0, 100.0 };//设置起始的相机位置
static G_Rotation eyepoint_rot = {-15.0*G_DEG_TO_RAD, 0.0*G_DEG_TO_RAD, 0.0 };//设置起始的相机角度
GV_cam_set_position(camera_own_vehicle, PLT_DESIGN_EYE, &eyepoint_pos);
GV_cam_set_rotation(camera_own_vehicle, PLT_DESIGN_EYE, &eyepoint_rot);
切换相机的角度实际上是改变camera的位置及角度,所以只需要在int GV_user_init( void )函数中添加键盘切换语句,每次按下切换相机的指令后,在函数
int GV_user_init( void )中就会得到相应,这样就可以实现实时响应,其部分代码如下:
G_key_set_callback( 'f', camera_current);//切换相机角度
G_key_set_callback( 'b', camera_change);//切换相机角度
然后在每个子函数中设置相机的位置,这样就可以达到切换视角的效果了。
相机切换前后的对比图如图4.1和图4.2:
图4.1 相机未切换前视图
图4.2 相机切换后视角图
这里需要说明一点,相机切换到驾驶室后,其显示的图形如图4.2所示。但在实际生活中,驾驶员在驾驶室中驾驶汽车是,在视角绝不是这样,他至少会看到汽车内部的一些东西,如汽车的窗户、前板等等,而在这里并没有看到。这主要是因为调用的汽车模型是运用三文软件MultiGen-Paradigm制作的,这个软制作的模型只是采用简单的点、线、面,所以它比较小,也很方便。但这样必然也带来了不足,虽然从外面观察这个物体,它是一个汽车模型,但其内部是没有什么东西的。这也真是为什么从驾驶室内观察,其视角图会那样。
4.1.2 光资源创建
光源工具用于控制场景中的动态照明效果。OpenGVS照明子系统,包括材质和光源,是围绕OpenGL光模型概念构造的。光源工具的目的就是控制模拟光源如何在打开照明的场景中给对象分配颜色。OpenGVS照明模型分成四个独立成分:发射光、环境光、散射光和镜面反射光四部分独立运算,然后叠加在一起。发射光最简单—它来自一个对象并不受任何光源的影响。像氖灯一样,对象具有高发射性,它说明的材质设置。OpenGVS中,通过简单设置材质包含所需的发射设置来控制发射光;环境光来自某个光源,此光源被环境分散以至于其方向几乎不可能确定—它似乎来自各个方向。OpenGVS中,你能为光源和材质说明指定一个环境光成分。散射光来自一个方向,所以,如果它垂直照射表面,则比几乎不照射该表面亮。但是,一旦照射一个表面,它就向各方向散射,所以不管眼睛在什么位置,看起来都很亮。OpenGVS中,你能为光源和材质说明指定一个散射光成分。镜面反射光来自某个特定方向,且趋向于在优先方向上反射。光亮的金属或塑料具有高镜面反射成分,而粉笔或地毯几乎没有镜面反射。可以将镜面反射想象成发亮。OpenGVS中,你能为光源和材质说明指定一个镜面反射成分 。OpenGVS中调用函数GV_lsr_create很容易创建一个光源,在程序中创建光资源,同时还用设置光源的位置,在本系统中设置了环境光、散射光及方向光。其关键代码为: 基于OpenGVS的虚拟汽车驾驶模拟系统的开发(6):http://www.youerw.com/tongxin/lunwen_1612.html