3dExplorer.cpp
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:5k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // 3dExplorer.cpp : Defines the entry point for the application.
  2. ///////////////////////////////////////////////
  3. //作者:吴雪平  2002-6-17日修改
  4. //管理整个程序运行
  5. #include "stdafx.h"
  6. #include "CGL.h"
  7. #include "heightmapscene.h"
  8. ///////////////////////////////////////////////
  9. INPUT        Input;
  10. CGL          cGL;
  11. //CAudioPlay   cAudioPlay;      //need for dx8.0
  12. CHeightmapScene m_cHeightmapScene;
  13. ///////////////////////////////////////////////
  14. bool InitEngine()
  15. {
  16. /*f(!cAudioPlay.InitAudioPlay())
  17. {
  18. AudioOk=false;
  19. MessageBox(0, "cAudioPlay error", "Error", MB_OK | MB_ICONERROR);
  20. }
  21. */
  22. if(!m_cHeightmapScene.InitHeightmapScene(&Input))
  23. {
  24. MessageBox(0, "cText error // 3dExplorer.cpp ", "Error", MB_OK | MB_ICONERROR);
  25. return FALSE;
  26. }
  27. return true;
  28. }
  29. GLvoid DrawGLScene()
  30. {
  31. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
  32. glLoadIdentity();
  33.     ////////////////////////////////
  34.     m_cHeightmapScene.RenderHeightmapScene();
  35. ////////////////////////////
  36. }
  37. LRESULT CALLBACK WndProc( HWND hWnd,
  38. UINT message,
  39. WPARAM wParam,
  40. LPARAM lParam)
  41. {
  42. // Used later on to get the size of the window
  43. // Tells Windows we want to check the message
  44. switch (message)
  45. {
  46. case WM_CREATE: // Window creation
  47. if (!cGL.InitGL(800,600,1,hWnd))
  48. { // Init failed
  49. cGL.DestroyGL(); // Shutdown GL
  50. PostQuitMessage(0); // Exit programm
  51. }
  52. ShowCursor(FALSE); // Hide mouse
  53. break;
  54. case WM_DESTROY: // Windows being destroyed
  55. case WM_CLOSE: // Windows being closed
  56. cGL.DestroyGL(); // Shutown GL
  57. ShowCursor(TRUE); // Show mouse
  58. PostQuitMessage(0); // Quit the program
  59. break;
  60. case WM_KEYDOWN: // Key Being Held Down
  61. Input.keys[wParam] = true;
  62. break;
  63. case WM_KEYUP: // Key Is Released
  64. Input.keys[wParam] = false;
  65. break;
  66. case WM_LBUTTONDOWN: // Left mouse button is pressed
  67. Input.mouseButtons[0]=true;
  68. break;
  69. case WM_LBUTTONUP: // Left mouse button is pressed
  70. Input.mouseButtons[0]=false;
  71. break;
  72. case WM_RBUTTONDOWN:
  73. // Right mouse button is pressed
  74. // cGL.ChangeFOVAngle(1);
  75. Input.mouseButtons[1]=true;
  76. break;
  77. case WM_RBUTTONUP:
  78. cGL.ChangeFOVAngle(0);
  79. // Right mouse button is pressed
  80. Input.mouseButtons[1]=false;
  81. break;
  82. case WM_MOUSEMOVE:
  83. Input.mousePos.x = LOWORD(lParam); // Position of the cursor 
  84. Input.mousePos.y = HIWORD(lParam);
  85. break;
  86. case WM_SIZE: // Resizing the screen
  87. cGL.Resize(LOWORD(lParam),HIWORD(lParam));
  88. break;
  89. default:
  90. // Pass windows messages
  91. return (DefWindowProc(hWnd, message, wParam, lParam));
  92. }
  93. return (0);
  94. }
  95. int APIENTRY WinMain(HINSTANCE hInstance,
  96.                      HINSTANCE hPrevInstance,
  97.                      LPSTR     lpCmdLine,
  98.                      int       nCmdShow)
  99. {
  100.   MSG msg; // Windows message structure
  101. WNDCLASS wc; // Windows class structure used to set up the type of window
  102. HWND hWnd; // Storage for window handle
  103. wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  104. wc.lpfnWndProc = (WNDPROC) WndProc;
  105. wc.cbClsExtra = 0;
  106. wc.cbWndExtra = 0;
  107. wc.hInstance = hInstance;
  108. wc.hIcon = NULL;
  109. wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  110. wc.hbrBackground = NULL;
  111. wc.lpszMenuName = NULL;
  112. wc.lpszClassName = "3dExplorer";
  113. if(!RegisterClass(&wc))
  114. {
  115. MessageBox(0, "Failed to register the window class", "Error", MB_OK | MB_ICONERROR);
  116. return FALSE;
  117. }
  118. hWnd = CreateWindow(
  119. "3dExplorer",
  120. "Exploring in 3D world !", // Title appearing at the top of the window
  121. WS_POPUP |
  122. WS_CLIPCHILDREN |
  123. WS_CLIPSIBLINGS,
  124. 0, // The position of the window on the screen
  125. 0,
  126. 800, // The width and height of the window
  127. 600,
  128. NULL,
  129. NULL,
  130. hInstance,
  131. NULL);
  132. if (!hWnd)
  133. {
  134. MessageBox(0, "Window creation error", "Error", MB_OK | MB_ICONERROR);
  135. return FALSE;
  136. }
  137. ShowWindow(hWnd, SW_SHOW);
  138. UpdateWindow(hWnd);
  139. SetFocus(hWnd);
  140.     
  141.     if(!InitEngine())
  142. {
  143. MessageBox(0, "InitEngine error", "Error", MB_OK | MB_ICONERROR);
  144. return FALSE;
  145. }
  146. while (1)
  147. {
  148. // Process All Messages
  149. while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
  150. {
  151. if (GetMessage(&msg, NULL, 0, 0))
  152. {
  153. TranslateMessage(&msg);
  154. DispatchMessage(&msg);
  155. }
  156. else
  157. {
  158. return TRUE;
  159. }
  160. }
  161.         
  162.      DrawGLScene();
  163. cGL.SwapBuffers();
  164.         //按鼠标右键放大
  165. if(Input.mouseButtons[1])cGL.ChangeFOVAngle(1);
  166.         //按ESC键退出
  167.      if (Input.keys[VK_ESCAPE]) SendMessage(hWnd, WM_CLOSE, 0, 0);
  168. }
  169. return 0;
  170. }