void MODEL :: display(){ /*DrawCapsule3D( VGet(x+600*sinf(rotateY), y+y0+200.0f-500*sinf(rotateX), z+600*cosf(rotateY)), VGet(x-200*sinf(rotateY), y+y0+200.0f+500*sinf(rotateX), z-200*cosf(rotateY)), 210.0f, 2, GetColor(255,255,255), GetColor(255,255,255), FALSE);*/ playTime += 200.0f; if(playTime >= animTime) playTime = 0.0f; mS->move(); mS->display(); MV1RefreshCollInfo(ModelHandle, 39); MATRIX rot = MMult(MMult(MGetRotX(rotateX), MGetRotZ(rotateZ)),MGetRotY(rotateY)); MATRIX trans = MGetTranslate(VGet(x+x0, y+y0, z+z0)); MV1SetMatrix(ModelHandle, MMult(rot, trans)); MV1SetAttachAnimTime(ModelHandle, attachIndex, playTime); MV1DrawModel(ModelHandle); }
void JupiterSystemDiorama::setVertex() { static MATRIX WorkMat; // #### 自転角、公転角から、ローカル座標における位置を計算 m_pPrimalyObj->resetVertex(); // 主星 - 自転 WorkMat = MGetRotY( (float)m_dPrimalyRotateAngle ); // 主星 - ワールド座標に変換 WorkMat = MMult( WorkMat, m_mLocalToWorldMatrix ); // Vertexに反映 m_pPrimalyObj->MatTransVertex( WorkMat ); // 衛星 for( int i=0; i<m_iSatelliteNum; i++ ) { m_cSatelliteObjList[i].resetVertex(); // 自転 WorkMat = MGetRotY( (float)m_dSatelliteRotateAngleList[i] ); // 公転 Vector2D OrbitalPos2D( 1, 0 ); OrbitalPos2D = m_pSatelliteOrbitalRadius[i] * OrbitalPos2D.rot(m_dSatelliteOrbitalAngleList[i]); //Vector3D OrbitalPos3D = OrbitalPos2D.toVector3D(); WorkMat.m[3][0] = OrbitalPos2D.x; WorkMat.m[3][2] = OrbitalPos2D.y; // ワールド座標に変換 WorkMat = MMult( WorkMat, m_mLocalToWorldMatrix ); // 座標変換行列を合成するときは、先に作用させたい行列を MMult の左側に置くこと。 // Vertexに反映 m_cSatelliteObjList[i].MatTransVertex( WorkMat ); // 軌道線 m_cSatelliteOrbitalObjList[i].resetVertex(); m_cSatelliteOrbitalObjList[i].MatTransVertex( m_mLocalToWorldMatrix ); } };