在本课题的研究过程中,通过视点变换和模型变换相结合,来达到课程设计的要求。但是,遇到很多问题,比如当需要的转换是一个序列时,即既有平移变换又有旋转变换的时候,这两个命令的顺序对实际的模型操作的作用是不同的,比如下面这段代码:
......
glTranslatef(0.0,0.0,20.0); //平移命令
glRotatef(45.0,1.0,0.0,0.0); //旋转命令
画电机模型;......
那么它的实际效果如图4.2所示:
图4.2 平移命令在前 图4.3 旋转命令在前
而当变换两个平移命令的顺序时,实际的效果如上图4.3所示:
这就使本课题中如果要实现对电机模型的旋转和平移变换,则顺序一定要是平移命令在前面,旋转命令在后面,这样才可以实现电机各部分的自转效果(即绕三个轴的旋转),也就是图4.2的效果而不是图4.3的效果。
4.2 本课题的难点—1.实现自由控制电机及其各部分转动2.电机各部分组成一个整体3.电机各部分的选取和拆卸
在成功导入和画出电机各部分模型之后,为了体现其3D效果,需要用鼠标控制模型绕中心转动,这里要用到MessageTranslate类,其作用是反馈鼠标的运动位移信息,程序中我用的是g_fSpinX和g_fSpinY这个变量来保存鼠标在X和Y方向的总的位移量,实现语句是: g_fSpinX-=(ptCurrentMousePosit.x-ptLastMousePosit.x);
g_fSpinY-=(ptCurrentMousePosit.y-ptLastMousePosit.y);然后将这两个变量作为旋转函数glRotatef的参数,语句是:
glRotatef( -g_fSpinY, 0.0f, 1.0f, 0.0f );
glRotatef( -g_fSpinX, 1.0f, 0.0f, 0.0f );不得不指出的是不能忘记在这个窗 VC++虚拟现实技术制作电机模型仿真软件(7):http://www.751com.cn/tongxin/lunwen_8535.html