private void gyroRotatingTransform() { // make the gyro turn around itself m_rotatingAngle += m_rotatingSpeed; GL.glTranslatef(CubeWidth / 2.0f, 0.0f, CubeDepth / 2.0f); GL.glRotatef(m_rotatingAngle, 0.0f, -1.0f, 0.0f); GL.glTranslatef(-CubeWidth / 2.0f, 0.0f, -CubeDepth / 2.0f); // the gyro loose power GL.glRotatef(m_fallingAngle, 1.0f, 0.0f, 0.0f); m_rotatingSpeed -= m_rotatingSlowFactor; m_fallingAngle += m_fallingFactor; if (m_fallingAngle >= 45) { m_yAxisFellAngle = m_rotatingAngle % 360.0f; m_xAxisFellAngle = m_fallingAngle % 360.0f; m_gyroState = eGyroState.Slowing; } }
private void gyroSlowingTransform() { // calc slowing angle m_slowingAngle += m_slowingSpeed; // set the gyro last position with swinging angle GL.glTranslatef(CubeWidth / 2.0f, 0.0f, CubeDepth / 2.0f); GL.glRotatef(m_yAxisFellAngle + m_slowingAngle, 0.0f, -1.0f, 0.0f); GL.glTranslatef(-CubeWidth / 2.0f, 0.0f, -CubeDepth / 2.0f); GL.glRotatef(m_xAxisFellAngle, 1.0f, 0.0f, 0.0f); m_slowingSpeed -= m_slowingSlowFactor; // slow down is linear if (m_slowingSpeed < m_startStopingSpeed) { m_startedStopingAngle = m_slowingAngle; m_stopingAngle = m_slowingAngle; m_stopingSpeed = m_slowingSpeed; m_gyroState = eGyroState.Stoping; } }