在某些场景中,物体颜色需要动态控制。例如,在危险情况下,物体改变为红色;在正常情况下,物体改变为蓝色。
首先引入材质、状态的头文件:
#include " vrMaterial.h"
#include " vrState.h"
#include " vsGeometry.h"
整个设置过程:分别设置状态的材质元素、光照元素和颜色元素,然后依次遍历物体的几何体,并把几何体的状态设置成赋值了材质元素、光照元素和颜色元素的状态。 设置材质元素,包含设置漫反射颜色、散射颜色、镜面反射颜色和发射颜色:
//为材质元素作准备
vrMaterial *material=new vrMaterial();
material->setColor(vrMaterial::COLOR_AMBIENT,r,g,b,1.0);
material->setColor(vrMaterial::COLOR_DIFFUSE,r,g,b,0.0);
material->setColor(vrMaterial::COLOR_SPECULAR,r,g,b,1.0);
material->setColor(vrMaterial::COLOR_EMISSIVE,r,g,b,1.0);
material->setSpecularExponent(50.0);
//建立材质元素并赋值
vrMaterial::Element materialElement;
materialElement.m_side=vrMaterial::SIDE_FRONT_AND_BACK;
materialElement.m_material=material;
设置光照模型,包含设置光照的漫反射颜色:
设置跟随颜色元素:
//建立颜色轨迹元素并赋值
vrColorTrack::Element colorTrackElement;(www.daowen.com)
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);
最后,遍历物体对象的几何体,设置几何体的状态值:
整个详细代码如图6.23.1所示,其中,r、g、b 分别代表红、绿、蓝,取值方位均为[0,1]。
图6.23.1 物体颜色控制实现代码
如图6.23.2所示,分别调用函数,实现功能:
PublicMember::SetObjectColor(pObjectHummer,1.0,0.0,0.0);//设置成红色
PublicMember::SetObjectColor(pObjectHummer,0.0,1.0,0.0);//设置成绿色
PublicMember::SetObjectColor(pObjectHummer,0.0,0.0,1.0);//设置成蓝色
另外,可以设置RGB的混合调色值,呈现出不同的颜色,满足不同的需求。
图6.22.1 物体颜色控制
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。