示例#1
0
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);
}
示例#2
0
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 );

	}

};