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

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // MyTerrainWnd.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. #include "MyColorPaletteWnd.h"
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #endif
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CMyTerrainWnd
  29. IMPLEMENT_DYNAMIC(CMyTerrainWnd, CMyglWnd)
  30. CMyTerrainWnd::CMyTerrainWnd()
  31. {
  32. // Set our camera to Orthographic view and
  33. // initialize our camera variables
  34. m_Camera.m_bPerspective = TRUE;
  35. m_Camera.m_fOrigin[X] =  0.0f;
  36. m_Camera.m_fOrigin[Y] =  0.0f;
  37. m_Camera.m_fOrigin[Z] = 50.0f;
  38. m_Camera.m_fRotation[X] = -75.0f;
  39. m_Camera.m_fRotation[Y] =   0.0f;
  40. m_Camera.m_fRotation[Z] = -15.0f;
  41. m_Camera.m_fNear =   0.0f;
  42. m_Camera.m_fFar  = 300.0f;
  43. m_pTerrainObject = new C3dObjectTerrain;
  44. }
  45. CMyTerrainWnd::~CMyTerrainWnd()
  46. {
  47. if(m_pTerrainObject)
  48. delete m_pTerrainObject;
  49. }
  50. BEGIN_MESSAGE_MAP(CMyTerrainWnd, CWnd)
  51. //{{AFX_MSG_MAP(CMyTerrainWnd)
  52. ON_WM_PAINT()
  53. ON_WM_CREATE()
  54. ON_WM_DESTROY()
  55. ON_WM_SIZE()
  56. ON_WM_PALETTECHANGED()
  57. ON_WM_QUERYNEWPALETTE()
  58. ON_WM_ERASEBKGND()
  59. //}}AFX_MSG_MAP
  60. END_MESSAGE_MAP()
  61. BOOL CMyTerrainWnd::Create(DWORD dwExStyle, LPCTSTR lpszClassName,
  62. LPCTSTR lpszWindowName, DWORD dwStyle,
  63. const RECT& rect, CWnd* pParentWnd, UINT nID,
  64. CCreateContext* pContext) 
  65. {
  66. // if(lpszClassName == NULL)
  67. // // Register a class with its own device context and the 'cross' cursor
  68. // lpszClassName = AfxRegisterWndClass(CS_OWNDC | CS_HREDRAW | CS_VREDRAW,
  69. // ::LoadCursor(NULL, IDC_CROSS));
  70. return CMyglWnd::Create(dwExStyle, lpszClassName, lpszWindowName,
  71. dwStyle, rect, pParentWnd, nID, pContext);
  72. }
  73. /////////////////////////////////////////////////////////////////////////////
  74. // CMyTerrainWnd messages forwarded to CMyglWnd base class
  75. void CMyTerrainWnd::OnDestroy() 
  76. {
  77. // Forward the message to the base class
  78. CMyglWnd::OnDestroy();
  79. }
  80. void CMyTerrainWnd::OnSize(UINT nType, int cx, int cy) 
  81. {
  82. // Forward the message to the base class
  83. CMyglWnd::OnSize(nType, cx, cy);
  84. }
  85. void CMyTerrainWnd::OnPaletteChanged(CWnd* pFocusWnd) 
  86. {
  87. // Forward the message to the base class
  88. CMyglWnd::OnPaletteChanged(pFocusWnd);
  89. }
  90. BOOL CMyTerrainWnd::OnQueryNewPalette() 
  91. {
  92. // Forward the message to the base class
  93. return CMyglWnd::OnQueryNewPalette();
  94. }
  95. BOOL CMyTerrainWnd::OnEraseBkgnd(CDC* pDC) 
  96. {
  97. // Forward the message to the base class
  98. return CMyglWnd::OnEraseBkgnd(pDC);
  99. }
  100. /////////////////////////////////////////////////////////////////////////////
  101. // CMyTerrainWnd message handlers
  102. int CMyTerrainWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  103. {
  104. if (CMyglWnd::OnCreate(lpCreateStruct) == -1)
  105. return -1;
  106. return 0;
  107. }
  108. void CMyTerrainWnd::OnPaint() 
  109. {
  110. CPaintDC dc(this); // device context for painting
  111. // Make this view the current OpenGL rendering context...
  112. if(!the3dEngine.EnableRC(dc, m_hRC, TRUE))
  113. return;
  114. // Call OpenGL drawing code
  115. RenderPreviewWnd();
  116. // Exchange the front and back buffers
  117. SwapBuffers(dc);
  118. // Releases the device context that is used by the rendering context
  119. // to allow other rendering contexts to co-exist.
  120. the3dEngine.EnableRC(NULL, NULL, FALSE);
  121. // Do not call CWnd::OnPaint() for painting messages
  122. }
  123. void CMyTerrainWnd::RenderPreviewWnd()
  124. {
  125. GLfloat fOrigin [4] = {-13.0f, 34.0f, 10.0f, 1.0f};
  126. GLfloat fColorAmbient [4]  = {0.2f, 0.2f, 0.2f, 1.0f};
  127. GLfloat fColorDiffuse [4]  = {0.7f, 0.7f, 0.7f, 1.0f};
  128. GLfloat fColorSpecular [4] = {0.9f, 0.9f, 0.9f, 1.0f};
  129. // Enable color material
  130. glEnable(GL_COLOR_MATERIAL);
  131. // Enable lighting
  132. glEnable(GL_LIGHTING);
  133. // If we have a palette, enable dithering of color before
  134. // writing to the color buffer
  135. if(the3dEngine.GetPalette())
  136. glEnable(GL_DITHER);
  137. // We want specular reflections to take the direction of our
  138. // cameras' position
  139. glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, 1.0f);
  140. glEnable(GL_DEPTH_TEST);
  141. glShadeModel(GL_SMOOTH);
  142. // Set the background color to black (default)
  143. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  144. // Clear the window with current clearing color
  145. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  146. // Save the current Modelview matrix
  147. glMatrixMode(GL_MODELVIEW);
  148. glPushMatrix();
  149. // Position our camera
  150. m_Camera.PositionCamera();
  151. // Set the Lights Parameters and Enable...
  152. glLightfv(GL_LIGHT0, GL_AMBIENT, fColorAmbient);
  153. glLightfv(GL_LIGHT0, GL_DIFFUSE, fColorDiffuse);
  154. glLightfv(GL_LIGHT0, GL_SPECULAR, fColorSpecular);
  155. glLightfv(GL_LIGHT0, GL_POSITION, fOrigin);
  156. glEnable(GL_LIGHT0);
  157. m_pTerrainObject->SetAttributes(NULL, NULL);
  158. m_pTerrainObject->Build(NULL, NULL);
  159. // Restore the Modelview matrix
  160. glPopMatrix();
  161. // Flush drawing commands
  162. glFlush();
  163. }