# TerraVisor

TerraVisor is a 3D visualization tool designed for rendering and exploring terrain data. It provides users with interactive features to manipulate and visualize complex terrain models from real height data.

## Features

- **Real Height Data**: Render height data from online services like NASA Earthdata, USGS National Map, or OpenTopography.
- **Real-Time Tessellation**: Dynamically tessellate the height data based on terrain slopes and proximity to the camera.
- **Export Tessellated Terrain**: Use the tessellated terrain in your own projects by exporting the tessellated mesh.

## Installation

### Prerequisites

Before building TerraVisor, ensure that you have the following prerequisites installed on your system:

- **Git**: Used for cloning the repository and managing source code.

- **CMake**: Build system generator used to configure the project.

- **Build System**: Needed by **CMake** to build and configure the project. This can be **Ninja**, **Make**, or any other build system you prefer.

- **C++ Compiler**: Required for compiling the project. You can use compilers like **GCC** on Windows or Linux, or **MSVC** on Windows.

- **vcpkg**: Package manager for acquiring C++ libraries.

  - **Windows Users**: Ensure you have either the **Visual Studio Build Tools** or **Visual Studio** with the C++ desktop development installed on your machine.

### Installation Steps

1. **Clone the Repository**: 

   First, clone the repository from GitLab
   ```bash
   git clone http://git.jackmchristensen.com/jack/terravisor.git
   cd terravisor
   ```

2. **Install Dependencies**: 

   Use `vcpkg` to install dependencies. From the vcpkg directory call:
   ```bash
    ./vcpkg install glm glew glfw3 assimp freeimage
   ```

3. **Configure the Project**: 

   Navigate back to the project root directory and configure the project using CMake and your build system of choice. For this example, we'll use Ninja:
   ```bash
   cmake -B build -S . -G Ninja --preset release
   ```
   If necessary, specify `VCPKG_ROOT` before configuring the project:
   - On Linux:
      ```bash
      export VCPKG_ROOT=/path/to/vcpkg
      ```
   - On Windows:
      ```bash
      set VCPKG_ROOT=C:/path/to/vcpkg # If in powershell use $Env:VCPKG_ROOT = "C:/path/to/vcpkg"
      ```

4. **Build the Project**: 

   Build the project using Ninja:
   ```bash
   cmake --build build
   ```

5. **Run the Application**:

   Once the build process is complete, you can run the TerraVisor application:
   ```bash
   ./build/TerraVisor
   ```

## Acknowledgements

GLEW - OpenGL Extension Wrangler Library \
GLFW - OpenGL Framework \
GLM - OpenGL Mathematics \
ASSIMP - Open Asset Import Library \
FreeImage - Graphics Import Library \
Dear ImGui - GUI framework

## Contact
For questions or support, please reach out to Jack Christensen at <contact@jackmchristensen.com>