3DS各个模块的相对运动

由于3DS模型中分几个部分(模块),现在来研究下各个模块的相对运动,比如坦克的炮塔旋转,直升机螺旋浆转动

来看一下  T_HELI_L.3DS 这个直升机的组成:

for(unsigned int i=0;i<gothicModel.pObject.size();i++)
{
		pVerts=gothicModel.pObject[i].pVerts;
		 //显示对象名称
		printf("对象%d名称:%s\n",i,gothicModel.pObject[i].strName);
}

对象0名称:Camera01
对象1名称:Chasis03
对象2名称:Line01
对象3名称:Chasis01
对象4名称:Chasis02
对象5名称:Chasis05
对象6名称:Chasis06
对象7名称:Box03
对象8名称:Chasis
对象9名称:Rectangle1

也看不出哪个是螺旋浆。

到 CLoad3DS.cpp 的 drawModel 中依次增加 i 值:

	// 遍历模型中所有的对象
	//for(int i = 7; i < Model.numOfObjects; i++)
	int i = 7;

原来螺旋浆的名称叫 Box03 。

下面来求旋转轴(外包围盒的中心):

//定义转动轴位置(螺旋浆中心)
GLfloat xt1=0.0f,zt1=0.0f;// 螺旋浆绕y轴转动,y用不动


NBVector3 *pVerts;      // 对象的顶点
pVerts=gothicModel.pObject[i].pVerts;
//遍历对象中的所有顶点
 for(int j=0;j<gothicModel.pObject[i].numOfVerts;j++)
 {	
	 //比较大小,留下最小和最大值
	 t=pVerts->x;
	 xmin=(t<xmin)?t:xmin;
	 xmax=(t>xmax)?t:xmax;

	 t=pVerts->y;
	 ymin=(t<ymin)?t:ymin;
	 ymax=(t>ymax)?t:ymax;

	 t=pVerts->z;
	 zmin=(t<zmin)?t:zmin;
	 zmax=(t>zmax)?t:zmax;
	pVerts++;//下一个顶点
 }
 //显示对象名称
//printf("对象%d名称:%s\n",i,gothicModel.pObject[i].strName);
//外框一半是中心吗
xt1=xmin+(xmax-xmin)/2;//
zt1=zmin+(zmax-zmin)/2;

printf("xt1:%f,\n",xt1);
printf("zt1:%f,\n",zt1);	

转动:

把CLoad3DS.cpp另存为CLoad3DS1.cpp

修改drawModel的代码

#include "CLoad3DS1.cpp"

float rquad=0.0;//转动量  

void SpinDisplay()
{
	rquad+=1.5f;// 旋转
	if( rquad > 360 )
	   rquad -= 360;

	glutPostRedisplay();
}
void drawModel(t3DModel Model,bool touming,bool outTex)
{

	......//省略看原文
	if(i==7){
		glPushMatrix();//保存当前状态

		glTranslatef(xt1,0.0f,zt1);//把原点移动螺旋浆中心
		glRotatef(rquad,0.0f,1.0f,0.0f);// 绕y轴旋转 
		glTranslatef(-xt1,0.0f,-zt1);//还原到原位

			
	}else if(i==8){
		glPopMatrix();//恢复原样
	}
	......//省略看原文
}

glutIdleFunc( SpinDisplay );//main中注册旋转


哈哈,螺旋浆转动了,虽然跑到外面出去了。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值