// To compile on Windows // Install GLFW 3.3.8 // https://www.glfw.org/download.html // Install GLEW 2.2.0 // https://github.com/nigels-com/glew/releases/tag/glew-2.2.0 // // extract the downloaded .zip files to "C:/libs"; this is currently expected // by our CMakeLists.txt. // Install CMake // https://cmake.org/download // Add to PATH for all users // from project root: // mkdir build // cd build // cmake .. // cmake --build . // The last step compiles the executable - this can also be done from Visual // Studio // To run in VS // Set startup project in Solution Explorer // Press F5 to run // To run in VSCode // https://code.visualstudio.com/docs/cpp/config-mingw // To compile on Arch Linux // // Install dependencies // sudo pacman -S glfw mesa glew // // Build // cmake .. // cmake --build . #include #include #include #include #include #include "gfx.hpp" #include "triangle.hpp" #include #include "astro/twoBodyMethods.hpp" // Initialize GLFW, OpenGL and GLEW, open a window and make it the current context. // Returns 0 for success, and -1 for any failure. // Failures are printed to STDERR. int initGraphics(GLFWwindow** window) { // Set up GLFW, OpenGL and GLEW. if (!glfwInit()) { std::cerr << "Failed to initialize GLFW" << std::endl; return -1; } *window = glfwCreateWindow(640, 480, "Hello Astro", NULL, NULL); if (!window) { glfwTerminate(); std::cerr << "Failed to open window with GLFW" << std::endl; return -1; } glfwMakeContextCurrent(*window); glewExperimental = GL_TRUE; if (glewInit() != GLEW_OK) { std::cerr << "Failed to initialize GLEW" << std::endl; return -1; } return 0; } int main() { // Calculate period of ISS orbit around the Earth const float semiMajorAxis = 6738000; const float gravitationalParameter = 3.986e14; float period = astro::computeKeplerOrbitalPeriod(semiMajorAxis, gravitationalParameter); period /= 60.0; std::cout << period << std::endl; glm::vec3 v(0.0, 1.0, 2.0); std::cout << "(" << v.x << ", " << v.y << ", " << v.z << ")" << std::endl; GLFWwindow* window = nullptr; if (initGraphics(&window) != 0) return -1; Triangle triangle(compileShaderProgram()); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // Main loop while (!glfwWindowShouldClose(window)) { glClearColor(0.2, 0.3, 0.3, 1.0); glClear(GL_COLOR_BUFFER_BIT); triangle.render(glfwGetTime()); glfwSwapBuffers(window); glfwPollEvents(); } glfwTerminate(); return 0; }