/opengl-1-intermediate-mode

Started learning from scratch

Primary LanguageC++The UnlicenseUnlicense

Learning OpenGL

Started learning OpenGL from scratch, so right now it's OpenGL 1.1(intermediate mode) specification

Program opportunities:

  1. Tracking camera that's rotating vertical from 0° to 85° and whole 360° horizontal (it also has zoom option)
  2. Real fps counter*: count frames and divide it on time every 1 second (almost, usually it's like 1.04sec)*
  3. Count elapsed time by using windows functions
  4. MSAA settings
  5. Filtering settings
    Filtering types
    1)Linear filtering
    2)Bilinear filtering
    3)Bilinear filtering with mipmaps
    4)Trilinear filtering
    5)Anisotropic filtering х2
    6)Anisotropic filtering х4
    7)Anisotropic filtering х8
    8)Anisotropic filtering х16
    9)Anisotropic filtering х32
  6. Load materials and light attributes from file (filename.json)
  7. Load scene template objects attributes from scene.json
  8. Load mesh from wavefront .obj file
  9. Load textures using DevIL library
  10. GameObjects on field 21x21
  11. Using factory pattern to create GameObjects
  12. Player can spawn bomb that explodes after some time
  13. Bomb fuse shows in left-upper corner of window
  14. Moving game objects by player - bomb or light objects
  15. Moving monster that kills player if it's in 1 block around monster
  16. Portal can teleport player to the next one with same color
  17. Using Lee's path finding algorithms for monster's moving
  18. Using events of GameObjects to handle them
  19. Using VBO and EBO buffers
  20. Code splitted up by Data, Display and Simulation parts(.cpp and .h)

Used libraries:

  1. freeglut - open-source alternative to the OpenGL Utility Toolkit (GLUT) library
  2. GLM - C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specifications
  3. GLEW - The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C++ extension loading library.
  4. RapidJson - A fast JSON parser/generator for C++ with both SAX/DOM style API

Program in action Settings (FPS, MSAA, Filtering type) in the title

Controls:
Arrows - Rotation (up/down/left/right)
Mouse Wheel - Zoom (close/further)
WASD - Player movement
Space - Drop bomb at player's position
1 - Turn on/off Multisample anti-aliasing
2 - Change filtering type

GIF Link