- Textures
- Trees
- Water
- Arbitrary regions, they can also overlap
- Shadows
- Days are longer in the summer
- Rising water level in the summer, the water turns to ice in the winter
- The skybox is tinted the same color as the sun. Orange sunrise and sunset
Per region settings:
- Range summer/winter: The min and max height for the region in the summer and winter, between 0 and 1
- Diffuse texture: The texture
- Color summer/winter: Texture tint in the summer/winter
- Texture tiling: The amount of times the texture is tiled across the entire terrain
- Tree name: The name of the tree object to use for trees in this region.
- Tree dencity: The chance to spawn a tree per world unit.
- Pitch, roll and yaw controlls.
- Moving parts: joystick, throttle, propeller, alierons and tail fin.
- Cockpit, tail, wing and chase camera
- Pseudo gravity and drag
To access the scene editor uncomment the line " //#define EDITOR " in source/main.cpp
Controls:
Hold the right mouse button to move around
- Forward: I
- Back: K
- Left: J
- Right: L
- Up: Y
- Down H
Day/Night cycle
- 0600: 1
- 1200: 2
- 1800: 3
- 2400: 4
- Toggle cycle: 5
Seasons
- Month 3: 6
- Month 6: 7
- Month 9: 8
- Month 12: 9
- Toggle cycle: 0
Toggle contour lines: O
Gilder:
- Pitch: W / S
- Roll: A / D
- Yaw: Q / E
- Throttle: , / .
- Reset position: R
- Cycle waypoints: F
- Toggle physics: P
Freelook camera:
- Forward: I
- Back: K
- Left: J
- Right: L
- Up: Y
- Down H
Cycle cameras: -
Freelook and chase camera zoom: N/M
- Component based system where each 'game object' is only responsible for managing the components attached to it.
Some component like the Transform and MeshRenderer receives special treatment, but the user is free to create any sort of component they want. - Transforms can have a parent and translates/scales/rotates correctly with the parent. This is shown in the Transforms test scene.
- The SceneManager provides an easy way to create multiple seperate scenes and change between them. Multiple scenes can be loaded at once.
- The Model-, Shader- and TextureManagers help load their respective kind of asset and prevents duplication if multiple components use the same asset.
- There are a few UI elements (Button, Label, Layout and padding) that makes setting up a simple menu or HUD a pretty trivial task.
The UI elements can be anchored to any part of the screen and the position is automaticly updated when the windows is resized. - InputManager for eays access to both mouse and keyboard input.
- The MeshRenderer components are sorted by material and mesh to reduse the overhead of repeatedly switching materials.
GPU Instancing is also supported - Scene editor with custom component inspectors
- Phong lighting model with diffuse, specular, emission and normal maps.
- Multiple directional and point lights.
- Multiple directional shadow maps and a single cube map.
- Skybox.
- FreeType text.
Complier with support for C++ 17 and std::filesystem / std::experimental::filesystem
- File -> Open -> Folder - Select the root folder
- Select "main" as the startup item
- Set the source code file to the root directory containing "CMakeLists.txt"
- Set the build path to "\build"
- Click the configure button and select which generator you would like to use
- Click the generate button
- If your generator is an IDE such as Visual Studio, then open up the newly created EVA.sln file and set "main" as you StartUp Project.
- File -> Open - Select the root folder
- Select the "main" configuration
Open a terminal window in the root folder of the project
mkdir build
cd build
cmake ..
make
cd bin
./main
- Eivind Vold Aunebakk - Voldakk
- TheChernoProject - Abstracting OpenGL into Classes
- TheChernoProject - Buffer Layout Abstraction in OpenGL
- TheChernoProject - Shader Abstraction in OpenGL
- TheChernoProject - ImGui in OpenGL
- LearnOpenGL - Basic Lighting
- LearnOpenGL - Multiple lights
- LearnOpenGL - Gamma Correction
- LearnOpenGL - Shadow Mapping
- LearnOpenGL - Point Shadows
- LearnOpenGL - Normal Mapping
- LearnOpenGL - Instancing
- LearnOpenGL - Text Rendering
- opengl-tutorial - Picking with custom Ray-OBB function
- Stack Overflow - String to type mapping
- Stack Overflow - Full path to the executing app
- Stack Overflow - How to calculate normals in a terrain height grid