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

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // 3dFog.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. // C3dFog
  28. IMPLEMENT_DYNAMIC(C3dFog, CObject)
  29. /////////////////////////////////////////////////////////////////////////////
  30. // C3dFog construction
  31. C3dFog::C3dFog()
  32. {
  33. // Default Fog attribute settings
  34. m_enumMode = GL_EXP; // GL_LINEAR, GL_EXP, and GL_EXP2
  35. m_enumHint = GL_FASTEST; // GL_FASTEST, GL_NICEST
  36. m_fDensity = 0.05f;
  37. m_fStart = 1.0f; // Map fog start to 'Near' clipping plane default
  38. m_fEnd = 500.0f; // Map fog end to 'Far' clipping plane default
  39. m_Color.SetColor4f(0.0f, 0.0f, 0.0f, 0.0f);
  40. }
  41. /////////////////////////////////////////////////////////////////////////////
  42. // C3dFog Destructor
  43. C3dFog::~C3dFog()
  44. {
  45. }
  46. /////////////////////////////////////////////////////////////////////////////
  47. // C3dLight serialization
  48. void C3dFog::Serialize(CArchive& ar, int iVersion)
  49. {
  50. CString szBuffer;
  51. if (ar.IsStoring())
  52. {
  53. // Save the Fog member variables
  54. szBuffer.Format("%stC3dFog {n", szIndent);
  55. ar.WriteString(szBuffer);
  56. szBuffer.Format("%sttColor         < %f %f %f %f > // RGBAn", szIndent, m_Color.m_fColor[0], m_Color.m_fColor[1], m_Color.m_fColor[2], m_Color.m_fColor[3]);
  57. ar.WriteString(szBuffer);
  58. szBuffer.Format("%sttFog Hint      < %d >n", szIndent, m_enumHint);
  59. ar.WriteString(szBuffer);
  60. szBuffer.Format("%sttFog Mode      < %d >n", szIndent, m_enumMode);
  61. ar.WriteString(szBuffer);
  62. szBuffer.Format("%sttDensity       < %f >n", szIndent, m_fDensity);
  63. ar.WriteString(szBuffer);
  64. szBuffer.Format("%sttStart         < %f >n", szIndent, m_fStart);
  65. ar.WriteString(szBuffer);
  66. szBuffer.Format("%sttEnd Location  < %f >n", szIndent, m_fEnd);
  67. ar.WriteString(szBuffer);
  68. szBuffer.Format("%st}nn", szIndent); // end of fog def
  69. ar.WriteString(szBuffer);
  70. }
  71. else
  72. {
  73. // Read the Fog member variables
  74. do {
  75. // Look for the Fog header...
  76. szBuffer.TrimLeft();
  77. if(szBuffer.Compare("C3dFog {") == 0)
  78. break;
  79. } while(ar.ReadString(szBuffer));
  80. ar.ReadString(szBuffer);
  81. szBuffer.TrimLeft();
  82. sscanf(szBuffer, "Color         < %f %f %f %f >n", &m_Color.m_fColor[0], &m_Color.m_fColor[1], &m_Color.m_fColor[2], &m_Color.m_fColor[3]);
  83. ar.ReadString(szBuffer);
  84. szBuffer.TrimLeft();
  85. sscanf(szBuffer, "Fog Hint      < %d >n", &m_enumHint);
  86. ar.ReadString(szBuffer);
  87. szBuffer.TrimLeft();
  88. sscanf(szBuffer, "Fog Mode      < %d >n", &m_enumMode);
  89. ar.ReadString(szBuffer);
  90. szBuffer.TrimLeft();
  91. sscanf(szBuffer, "Density       < %f >n", &m_fDensity);
  92. ar.ReadString(szBuffer);
  93. szBuffer.TrimLeft();
  94. sscanf(szBuffer, "Start         < %f >n", &m_fStart);
  95. ar.ReadString(szBuffer);
  96. szBuffer.TrimLeft();
  97. sscanf(szBuffer, "End Location  < %f >n", &m_fEnd);
  98. ar.ReadString(szBuffer);
  99. sscanf(szBuffer, "}nn");
  100. }
  101. }
  102. /////////////////////////////////////////////////////////////////////////////
  103. // C3dFog Implimentation
  104. void C3dFog::SetAttributes()
  105. {
  106. glEnable(GL_FOG);
  107. glHint(GL_FOG_HINT, m_enumHint);
  108. glFogi(GL_FOG_MODE, m_enumMode);
  109. glFogf(GL_FOG_DENSITY, m_fDensity);
  110. glFogf(GL_FOG_START, m_fStart);
  111. glFogf(GL_FOG_END, m_fEnd);
  112. if(m_Color.m_fColor[3] < 1)
  113. glEnable(GL_ALPHA);
  114. else
  115. glDisable(GL_ALPHA);
  116. glFogfv(GL_FOG_COLOR, m_Color.m_fColor);
  117. }