在虚拟仿真中,纹理的运动仿真可以实现车轮、传送带、液体流动等仿真。纹理运动仿真主要分为两个过程:第一个过程是设计纹理渲染类;第二个过程是进行纹理渲染类的配置使用。
纹理渲染类的设计的代码如图9.8.7所示。纹理渲染类TextureAnimation 继承自系统的渲染类vrRenderStrategy,该类主要是重载了绘制函数:
virtual void draw(vrDrawContext *context,const vrDrawFunc::Data &data)
该函数获取纹理元素的坐标后,对坐标进行了修改,从而实现纹理运动仿真。在纹理渲染类TextureAnimation 中,设置了一个整型变量m_frameNumber,用于记录仿真场景是否进行了帧更新,更新后就对纹理元素坐标进行修改。
图9.8.7 纹理渲染策略类设计
对于纹理坐标的修改代码:
首先,vrTransform::ElementTexture m_textureTransformElement;用于储存纹理元素的转换矩阵,这里获取的是“m_textureTransformElement.m_matrix[0];”,它表示获取的是第一重纹理,单个物体对象是可以配置多重纹理的。然后对纹理转换矩阵进行处理:
等号右边的值大小,可以控制纹理运动的快慢;加减可以控制纹理的运动方向。具体应用时,可以多次反复试验,以得到最好的效果。另外,可以自行设计变量和机制用于控制纹理运动的方向和快慢。
设计好纹理渲染类以后,就需要有效使用它。在主线程中,内核对象配置“vpKernel::instance()->configure();”之后,帧循环之前,就是主要的配置场所,如图9.8.8所示。
vpObject *tank=vpObject::find("tank");(www.daowen.com)
tank->ref();
然后是实例化纹理渲染类:
TextureAnimation *m_strategy;
m_strategy=new TextureAnimation();
m_strategy->ref();
最后是遍历对象的子孙结点的几何体“vrGeometry *geometry;”,对所有的几何体应用设计的纹理渲染类。
图9.8.8 在主线程中配置使用纹理控制类
运行示例VPTestDialogAnimateTexture,可以得到如图9.8.9所示的效果,图中的坦克的履带在滚动。
图9.8.9 纹理运动控制效果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。