除了为图形设置纹理外,还可以为图形设置材质,使图形看起来更加形象逼真。本节将重点讨论VSG 中的材质控制。
控制图形材质是通过在状态类里设置元素值来完成的。需要设置材质元素、光照模式元素和颜色轨迹元素,然后把这3个元素值赋予状态类。
首先,为材质元素做准备,并设置相关的值,其代码为:
vrMaterial *material=new vrMaterial();
material->setColor(vrMaterial::COLOR_AMBIENT,0.2f,0.0f,0.0f,1.0);
material->setColor(vrMaterial::COLOR_DIFFUSE,1.0,0.0,0.0,0.0);
material->setColor(vrMaterial::COLOR_SPECULAR,1.0,0.0,0.0,1.0);
material->setColor(vrMaterial::COLOR_EMISSIVE,0.0,0.0,0.0,1.0);
material->setSpecularExponent(50.0);
第2行代码设置其环绕颜色,第3行代码设置其漫反射颜色,第4行代码设置其镜面反射颜色,第5行代码设置其散发光颜色,第6行代码设置其镜面反射的尺寸和亮度。
其次,为光照模式元素做准备,并设置其相关的值,其代码为:
vrLightModel *lightModel=new vrLightModel();
lightModel->setLocalViewerEnable(false);
lightModel->setTwoSidedLightingEnable(false);
lightModel->setAmbientColor(0.2f,0.2f,0.2f,1.0);
第2行代码设置其本地光无效,第3行代码设置其双面光照无效,第4行代码设置其漫反射颜色。
接着,分别建立材质元素、光照模式元素和颜色轨迹元素,并赋值,其代码如下:
//建立材质元素并赋值
vrMaterial::Element materialElement;
materialElement.m_side=vrMaterial::SIDE_FRONT_AND_BACK;
materialElement.m_material=material;(www.daowen.com)
//建立光照模式元素并赋值
vrLightModel::Element lightModelElement;
lightModelElement.m_lightModel=lightModel;
//建立颜色轨迹元素并赋值
vrColorTrack::Element colorTrackElement;
colorTrackElement.m_enable=false;
最后,利用状态对象,分别把材质元素、光照模式元素和颜色轨迹元素赋值给状态对象的元素,其代码如下:
vrState* pNonTexState=new vrState();
pNonTexState->setElement(vrMaterial::Element::Id,&materialElement);
pNonTexState->setElement(vrLightModel::Element::Id,&lightModelElement);
pNonTexState->setElement(vrColorTrack::Element::Id,&colorTrackElement);
其他代码与绘制球体基本相同。主线程中详细代码如图7.4.1所示,有关图形材质的代码用黑体字体进行了标识。
图7.4.1 图形材质控制主线程
运行程序,其效果如图7.4.2所示。图中仅仅绘制了一个半径为4 m的球体,为图形设置材质后,这个红色的球体不再随着运动而变换颜色,而是具有了它自己的材料特性。
图7.4.2 材质效果图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。