Animation.cpp
上传用户:shxiangxiu
上传日期:2007-01-03
资源大小:1101k
文件大小:7k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Animation.cpp : implementation file
  3. //
  4. // glOOP (OpenGL Object Oriented Programming library)
  5. // Copyright (c) Craig Fahrnbach 1997, 1998
  6. //
  7. // OpenGL is a registered trademark of Silicon Graphics
  8. //
  9. //
  10. // This program is provided for educational and personal use only and
  11. // is provided without guarantee or warrantee expressed or implied.
  12. //
  13. // Commercial use is strickly prohibited without written permission
  14. // from ImageWare Development.
  15. //
  16. // This program is -not- in the public domain.
  17. //
  18. /////////////////////////////////////////////////////////////////////////////
  19. #include "stdafx.h"
  20. #include "glOOP.h"
  21. #ifdef _DEBUG
  22. #define new DEBUG_NEW
  23. #undef THIS_FILE
  24. static char THIS_FILE[] = __FILE__;
  25. #endif
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CAnimation
  28. IMPLEMENT_DYNAMIC(CAnimation, CObject)
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CAnimation construction
  31. CAnimation::CAnimation()
  32. {
  33. // Set the attributes to default values..
  34. m_dTimePrevious = 0.0;
  35. m_Color.SetColor4f(0.0f, 0.0f, 0.0f, 1.0f);
  36. Vec4f(0.0f, 0.0f, 0.0f, 1.0f, m_fOrigin);
  37. Vec3f(0.0f, 0.0f, 0.0f, m_fRotation);
  38. Vec3f(0.0f, 0.0f, 0.0f, m_fScale);
  39. Vec3f(0.0f, 0.0f, 0.0f, m_fTranslate);
  40. }
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CAnimation Destructor
  43. CAnimation::~CAnimation()
  44. {
  45. }
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CAnimation Methods or virtual function implimentation
  48. void CAnimation::AddAnimationPage(LPVOID pSht, C3dObject* pObject, C3dCamera* pCamera, C3dWorld* pWorld)
  49. {
  50. // Virtual prototype function only!  Add specific
  51. // functionality to your derived object class!
  52. }
  53. void CAnimation::AnimateCamera(C3dCamera* pCamera, double dTime)
  54. {
  55. // Virtual prototype function only!  Add specific
  56. // functionality to your derived object class!
  57. }
  58. void CAnimation::AnimateObject(C3dObject* pObject, double dTime)
  59. {
  60. // Virtual prototype function only!  Add specific
  61. // functionality to your derived object class!
  62. }
  63. void CAnimation::AnimateWorld(C3dWorld* pWorld, double dTime)
  64. {
  65. // Virtual prototype function only!  Add specific
  66. // functionality to your derived object class!
  67. }
  68. void CAnimation::Serialize(CArchive& ar, int iVersion)
  69. {
  70. CString szBuffer;
  71. CString szName;
  72. szBuffer.GetBuffer(256);
  73. szName.GetBuffer(128);
  74. if (ar.IsStoring())
  75. {
  76. // Save the Base Class CAnimation data...
  77. szBuffer.Format("%stName          < %s >n", szIndent, m_szName);
  78. ar.WriteString(szBuffer);
  79. }
  80. else
  81. {
  82. // Read the Base Class CAnimation data...
  83. // Get the Name of this animation procedure.  Note that the
  84. // name may contain spaces, so we extract the 
  85. // string between the < > characters..
  86. ar.ReadString(szBuffer);
  87. // locate the position of the brackets
  88. int begin = szBuffer.Find("<");
  89. int end = szBuffer.Find(">");
  90. if(end > begin)
  91. {
  92. // extract the objectname from within the barckets
  93. m_szName = szBuffer.Mid(begin+1, (end-begin)-1);
  94. m_szName.TrimLeft(); // trim leading spaces
  95. m_szName.TrimRight(); // trim tailing spaces
  96. }
  97. // Must remove the derived class defined end marker!
  98. ar.ReadString(szBuffer);
  99. szBuffer.TrimLeft();
  100. sscanf(szBuffer, "}n");
  101. }
  102. }
  103. void CAnimation::Reset()
  104. {
  105. // Virtual prototype function only!  Add specific
  106. // functionality to your derived object class!
  107. }
  108. /////////////////////////////////////////////////////////////////////////////
  109. // CAnimation function implimentation
  110. CAnimation* CAnimation::IsAnimationClass(CString* szString)
  111. {
  112. // Is this class derived from CAnimation?
  113. // 
  114. if(szString->Compare("CAnimKeyFrame {") == 0) {
  115. CAnimKeyFrame* pAnimation = new CAnimKeyFrame;
  116. ASSERT(pAnimation);
  117. return pAnimation;
  118. }
  119. if(szString->Compare("CAnimSpin {") == 0) {
  120. CAnimSpin* pAnimation = new CAnimSpin;
  121. ASSERT(pAnimation);
  122. return pAnimation;
  123. }
  124. if(szString->Compare("CAnimWobble {") == 0) {
  125. CAnimWobble* pAnimation = new CAnimWobble;
  126. ASSERT(pAnimation);
  127. return pAnimation;
  128. }
  129. if(szString->Compare("CAnimAVI {") == 0) {
  130. CAnimAVI* pAnimation = new CAnimAVI;
  131. ASSERT(pAnimation);
  132. return pAnimation;
  133. }
  134. // Class not of type CAnimation
  135. return NULL;
  136. }
  137. void CAnimation::SaveCameraAttributes(C3dCamera* pCamera)
  138. {
  139. if(!pCamera)
  140. return;
  141. // Save our camera attributes
  142. VecCopy4f(pCamera->m_fOrigin,  m_fOrigin);
  143. VecCopy3f(pCamera->m_fRotation,  m_fRotation);
  144. }
  145. void CAnimation::SaveObjectAttributes(C3dObject* pObject)
  146. {
  147. if(!pObject)
  148. return;
  149. // Save our object attributes
  150. m_Color.SetColor4fv(&pObject->m_Color);
  151. VecCopy4f(pObject->m_fOrigin,  m_fOrigin);
  152. VecCopy3f(pObject->m_fRotation,  m_fRotation);
  153. VecCopy3f(pObject->m_fScale,  m_fScale);
  154. VecCopy3f(pObject->m_fTranslate, m_fTranslate);
  155. if(pObject->m_iType == LIGHT_OBJECT)
  156. {
  157. C3dObjectLight* pLight = (C3dObjectLight*)pObject;
  158. m_ColorAmb.SetColor4fv(&pLight->m_ColorAmbient);
  159. m_ColorDif.SetColor4fv(&pLight->m_ColorDiffuse);
  160. m_ColorSpc.SetColor4fv(&pLight->m_ColorSpecular);
  161. pLight->m_fSpotAngle = m_fSpotAngle;
  162. }
  163. }
  164. void CAnimation::RestoreCameraAttributes(C3dCamera* pCamera)
  165. {
  166. // Ensure that we have a vaild pointer..
  167. if(!pCamera)
  168. return;
  169. // Reset our common variables
  170. ResetCommon();
  171. // Restore our camera attributes
  172. VecCopy4f(m_fOrigin,    pCamera->m_fOrigin);
  173. VecCopy3f(m_fRotation,  pCamera->m_fRotation);
  174. }
  175. void CAnimation::RestoreObjectAttributes(C3dObject* pObject)
  176. {
  177. // Ensure that we have a vaild pointer..
  178. if(!pObject)
  179. return;
  180. // Reset our common variables
  181. ResetCommon();
  182. // Restore our object attributes
  183. pObject->m_Color.SetColor4fv(&m_Color);
  184. VecCopy4f(m_fOrigin,    pObject->m_fOrigin);
  185. VecCopy3f(m_fRotation,  pObject->m_fRotation);
  186. VecCopy3f(m_fScale,     pObject->m_fScale);
  187. VecCopy3f(m_fTranslate, pObject->m_fTranslate);
  188. if(pObject->m_iType == LIGHT_OBJECT)
  189. {
  190. C3dObjectLight* pLight = (C3dObjectLight*)pObject;
  191. pLight->m_ColorAmbient.SetColor4fv(&m_ColorAmb);
  192. pLight->m_ColorDiffuse.SetColor4fv(&m_ColorDif);
  193. pLight->m_ColorSpecular.SetColor4fv(&m_ColorSpc);
  194. pLight->m_fSpotAngle = m_fSpotAngle;
  195. }
  196. }
  197. void CAnimation::ResetCommon()
  198. {
  199. // Reset the first pass flag so that we will save the 
  200. // initial parameters.
  201. m_bFirst = TRUE;
  202. // Reset the time reference of our last iteration
  203. m_dTimePrevious = 0.0;
  204. // Call the derived CAnimation Reset procedure..
  205. Reset();
  206. }