diff --git a/CMakeLists.txt b/CMakeLists.txt index 486a02a..582a269 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,12 @@ project(gravity) set(CMAKE_CXX_STANDARD 17) +# Use vcpkg +if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) + set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + CACHE STRING "Vcpkg toolchain file") +endif() + # Find packages find_package(OpenGL REQUIRED) find_package(GLEW REQUIRED) @@ -31,7 +37,6 @@ target_link_libraries(gravity PRIVATE glm::glm ) -# On some systems, you might need to explicitly link against OpenGL if(UNIX AND NOT APPLE) target_link_libraries(gravity PRIVATE GL) endif() \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8729d77 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +FROM ubuntu:20.04 + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y \ + build-essential \ + cmake \ + git \ + curl \ + zip \ + unzip \ + tar \ + pkg-config \ + libx11-dev \ + libxrandr-dev \ + libxinerama-dev \ + libxcursor-dev \ + libxi-dev \ + libgl1-mesa-dev \ + libglu1-mesa-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install vcpkg +RUN git clone https://github.com/Microsoft/vcpkg.git /vcpkg \ + && /vcpkg/bootstrap-vcpkg.sh \ + && /vcpkg/vcpkg integrate install + +# Set the working directory +WORKDIR /app + +# Copy the project files +COPY . . + +# Install dependencies using vcpkg +RUN /vcpkg/vcpkg install $(cat vcpkg.json | jq -r '.dependencies[]') + +# Build the project +RUN mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake \ + && cmake --build . + +# Set the entrypoint +CMD ["./build/gravity"] \ No newline at end of file diff --git a/README.md b/README.md index 9546fc4..6442497 100644 --- a/README.md +++ b/README.md @@ -66,3 +66,50 @@ The program uses OpenGL to render the 3D scene: 3. The scale of the celestial bodies and their distances are not to true scale to make visualization easier. 4. Relativistic effects are not considered; the simulation uses classical Newtonian mechanics. +# How to Use & Installation + +### Prerequisites +- C++ compiler with C++17 support +- CMake (version 3.10 or higher) +- OpenGL libraries +- GLFW3 +- GLM (OpenGL Mathematics) +- vcpkg (for managing dependencies) + +### Building from Source +1. Clone the repository: +```bash +git clone https://github.com/Quinta0/gravity.git +cd gravity +``` +2. Install vcpkg and dependencies: +```bash +git clone https://github.com/Microsoft/vcpkg.git +./vcpkg/bootstrap-vcpkg.sh # On Windows, use bootstrap-vcpkg.bat +./vcpkg/vcpkg install +``` +3. Create a build directory and navigate to it: +```bash +mkdir build +cd build +``` +4. Generate the build files with CMake: +```bash +cmake .. -DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake +``` +5. Build the project: +```bash +cmake --build . +``` +6. Run the simulator: +```bash +./gravity +``` + + +### Using Docker +If you prefer to use Docker, follow these steps: + +1. Ensure Docker is installed on your system. + +2. Build the Docker image: diff --git a/Renderer.cpp b/Renderer.cpp index a9a6538..d6ea9bf 100644 --- a/Renderer.cpp +++ b/Renderer.cpp @@ -90,13 +90,13 @@ void Renderer::render(const Simulator& simulator) { minMass = std::min(minMass, body.getMass()); } - std::cout << "Camera position: " << cameraPos.x << ", " << cameraPos.y << ", " << cameraPos.z << std::endl; - std::cout << "Camera front: " << cameraFront.x << ", " << cameraFront.y << ", " << cameraFront.z << std::endl; + //std::cout << "Camera position: " << cameraPos.x << ", " << cameraPos.y << ", " << cameraPos.z << std::endl; + //std::cout << "Camera front: " << cameraFront.x << ", " << cameraFront.y << ", " << cameraFront.z << std::endl; for (size_t i = 0; i < bodies.size(); ++i) { const auto& body = bodies[i]; glm::dvec3 pos = body.getPosition(); - std::cout << "Body " << i << " position: " << pos.x << ", " << pos.y << ", " << pos.z << std::endl; + //std::cout << "Body " << i << " position: " << pos.x << ", " << pos.y << ", " << pos.z << std::endl; } // Calculate the log range @@ -117,18 +117,18 @@ void Renderer::render(const Simulator& simulator) { glm::dvec3 pos = body.getPosition(); glm::vec3 renderPos(static_cast(pos.x), static_cast(pos.y), static_cast(pos.z)); - std::cout << "Rendering body " << i << " ("; - switch(i) { - case 0: std::cout << "Sun"; break; - case 1: std::cout << "Mercury"; break; - case 2: std::cout << "Venus"; break; - case 3: std::cout << "Earth"; break; - case 4: std::cout << "Mars"; break; - default: std::cout << "Unknown"; break; - } - std::cout << ") at position (" - << pos.x << ", " << pos.y << ", " << pos.z - << ") with scale " << scaleFactor << std::endl; +// std::cout << "Rendering body " << i << " ("; +// switch(i) { +// case 0: std::cout << "Sun"; break; +// case 1: std::cout << "Mercury"; break; +// case 2: std::cout << "Venus"; break; +// case 3: std::cout << "Earth"; break; +// case 4: std::cout << "Mars"; break; +// default: std::cout << "Unknown"; break; +// } +// std::cout << ") at position (" +// << pos.x << ", " << pos.y << ", " << pos.z +// << ") with scale " << scaleFactor << std::endl; // Set color based on body index switch(i) { @@ -325,6 +325,8 @@ void Renderer::processInput() { cameraPos -= right * cameraSpeed; if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) cameraPos += right * cameraSpeed; + if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) + glfwSetWindowShouldClose(window, true); } void Renderer::cursorPosCallback(GLFWwindow* window, double xpos, double ypos) {