main.cpp
Upload User: szxjsk
Upload Date: 2022-06-16
Package Size: 35k
Code Size: 4k
Category:

OpenGL program

Development Platform:

C/C++

  1. /**********************************************************************
  2.   Camera with OpenGL
  3.   March, 13th, 2003
  4.   This tutorial was written by Philipp Crocoll
  5.   Contact: 
  6. philipp.crocoll@web.de
  7. www.codecolony.de
  8.   Every comment would be appreciated.
  9.   If you want to use parts of any code of mine:
  10. let me know and
  11. use it!
  12. **********************************************************************
  13. ESC: exit
  14. CAMERA movement:
  15. w : forwards
  16. s : backwards
  17. a : turn left
  18. d : turn right
  19. x : turn up
  20. y : turn down
  21. v : strafe right
  22. c : strafe left
  23. r : move up
  24. f : move down
  25. m/n : roll
  26. ***********************************************************************/
  27. #include <GLglut.h>
  28. #include <windows.h>
  29. #include "camera.h"
  30. CCamera Camera;
  31. void reshape(int x, int y)
  32. {
  33. if (y == 0 || x == 0) return;  //Nothing is visible then, so return
  34. //Set a new projection matrix
  35. glMatrixMode(GL_PROJECTION);  
  36. glLoadIdentity();
  37. //Angle of view:40 degrees
  38. //Near clipping plane distance: 0.5
  39. //Far clipping plane distance: 20.0
  40. gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0);
  41. glMatrixMode(GL_MODELVIEW);
  42. glViewport(0,0,x,y);  //Use the whole window for rendering
  43. }
  44. void Display(void)
  45. {
  46. glClear(GL_COLOR_BUFFER_BIT);
  47. glLoadIdentity();
  48. glTranslatef(0.0,-0.5,-6.0);
  49. glColor3f(0.3,0.0,0.0);
  50. glTranslatef(Camera.Position.x, Camera.Position.y, Camera.Position.z);
  51. glBegin (GL_LINES);
  52. glColor3f(0.2,0.2,0.2);
  53.   glVertex3f(0.0f,0.0f,0.0f);
  54.   glVertex3f(Camera.UpVector.x,0.0,0.0);
  55.   glVertex3f(Camera.UpVector.x,0.0,0.0);
  56.   glVertex3f(Camera.UpVector.x,0.0,Camera.UpVector.z);
  57.   glVertex3f(0.0f,0.0f,0.0f);
  58.   glVertex3f(Camera.UpVector.x,0.0,Camera.UpVector.z);
  59.   
  60.   glVertex3f(Camera.UpVector.x,0.0,Camera.UpVector.z);
  61.   glVertex3f(Camera.UpVector.x,Camera.UpVector.y,Camera.UpVector.z);
  62. glColor3f(0.2,0.0,0.0);
  63.   glVertex3f(0.0f,0.0f,0.0f);
  64.   glVertex3f(Camera.RightVector.x,0.0,0.0);
  65.   
  66.   glVertex3f(Camera.RightVector.x,0.0,0.0);
  67.   glVertex3f(Camera.RightVector.x,0.0,Camera.RightVector.z);
  68.   glVertex3f(0.0f,0.0f,0.0f);
  69.   glVertex3f(Camera.RightVector.x,0.0,Camera.RightVector.z);
  70.   glVertex3f(Camera.RightVector.x,0.0,Camera.RightVector.z);
  71.   glVertex3f(Camera.RightVector.x,Camera.RightVector.y,Camera.RightVector.z);
  72. glColor3f(0.3,0.3,0.0);
  73.   glVertex3f(0.0f,0.0f,0.0f);
  74.   glVertex3f(Camera.ViewDir.x,0.0,0.0);
  75.   
  76.   glVertex3f(Camera.ViewDir.x,0.0,0.0);
  77.   glVertex3f(Camera.ViewDir.x,0.0,Camera.ViewDir.z);
  78.   glVertex3f(0.0f,0.0f,0.0f);
  79.   glVertex3f(Camera.ViewDir.x,0.0,Camera.ViewDir.z);
  80.   glVertex3f(Camera.ViewDir.x,0.0,Camera.ViewDir.z);
  81.   glVertex3f(Camera.ViewDir.x,Camera.ViewDir.y,Camera.ViewDir.z);
  82. glEnd();
  83. glBegin (GL_LINES);
  84. glColor3f(1.0,1.0,1.0);
  85.   glVertex3f(0.0f,0.0f,0.0f);
  86.   glVertex3f(Camera.UpVector.x,Camera.UpVector.y,Camera.UpVector.z);
  87.   glColor3f(1.0,0.0,0.0);
  88.   glVertex3f(0.0f,0.0f,0.0f);
  89.   glVertex3f(Camera.RightVector.x,Camera.RightVector.y,Camera.RightVector.z);
  90.   glColor3f(1.0,1.0,0.0);
  91.   glVertex3f(0.0f,0.0f,0.0f);
  92.   glVertex3f(Camera.ViewDir.x,Camera.ViewDir.y,Camera.ViewDir.z);
  93. glEnd();
  94. glFlush();  
  95. glutSwapBuffers();
  96. }
  97. void KeyDown(unsigned char key, int x, int y)
  98. {
  99. switch (key) 
  100. {
  101. case 27: //ESC
  102. PostQuitMessage(0);
  103. break;
  104. case 'a':
  105. Camera.RotateY(5.0);
  106. Display();
  107. break;
  108. case 'd':
  109. Camera.RotateY(-5.0);
  110. Display();
  111. break;
  112. case 'w':
  113. Camera.MoveForward( -0.1 ) ;
  114. Display();
  115. break;
  116. case 's':
  117. Camera.MoveForward( 0.1 ) ;
  118. Display();
  119. break;
  120. case 'x':
  121. Camera.RotateX(5.0);
  122. Display();
  123. break;
  124. case 'y':
  125. Camera.RotateX(-5.0);
  126. Display();
  127. break;
  128. case 'c':
  129. Camera.StrafeRight(-0.1);
  130. Display();
  131. break;
  132. case 'v':
  133. Camera.StrafeRight(0.1);
  134. Display();
  135. break;
  136. case 'f':
  137. Camera.MoveUpward(-0.3);
  138. Display();
  139. break;
  140. case 'r':
  141. Camera.MoveUpward(0.3);
  142. Display();
  143. break;
  144. case 'm':
  145. Camera.RotateZ(-5.0);
  146. Display();
  147. break;
  148. case 'n':
  149. Camera.RotateZ(5.0);
  150. Display();
  151. break;
  152. }
  153. }
  154. int main(int argc, char **argv)
  155. {
  156. glutInit(&argc, argv);
  157. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  158. glutInitWindowSize(500,300);
  159. glutCreateWindow("Camera");
  160. Camera.Move( F3dVector(0.0, 0.0, 3.0 ));
  161. Camera.MoveForward( 1.0 );
  162. glutDisplayFunc(Display);
  163. glutReshapeFunc(reshape);
  164. glutKeyboardFunc(KeyDown);
  165. glutMainLoop();
  166. return 0;             
  167. }