DirectX如何构建一个太阳系(二)
XMatrixIdentity(&mObject[i].toWorldXForm);
// 循环计算各个节点转换到世界坐标的矩阵.
int k = i;
while( k != -1 ) //-1作为一个标兵,用好标兵技术很好的.
{
mObject[i].toWorldXForm *= mObject[k].toParentXForm;
k = mObject[k].parent; // Move up the ancestry chain.
}
}
}
让太阳系动起来:
[cpp]
void SolarSysDemo::updateScene(float dt)
{
// dt是时间,各个恒星随时间流逝而转动.
for(int i = 0; i < NUM_OBJECTS; ++i)
{
switch(mObject[i].typeID)
{
case SUN:
mObject[i].yAngle += 1.5f * dt;
break;
case PLANET:
mObject[i].yAngle += 2.0f * dt;
break;
case MOON:
mObject[i].yAngle += 2.5f * dt;
break;
}
// 转到360度就置零.
if(mObject[i].yAngle >= 2.0f*D3DX_PI)
mObject[i].yAngle = 0.0f;
}
}