X-Git-Url: https://eleni.mutantstargoat.com/git/?a=blobdiff_plain;f=src%2Fmain.cc;h=4d77441ffdb89e5a103a4a4259dffb519a3f32b9;hb=369d75c73bf926a6dbcf4d740c8664bbb401602a;hp=2926420e0280f8954b4d237917b3807ade77c245;hpb=64e2adbbab48320b6cd792e515b44cea112a3be4;p=demo diff --git a/src/main.cc b/src/main.cc index 2926420..4d77441 100644 --- a/src/main.cc +++ b/src/main.cc @@ -3,6 +3,12 @@ #include #include +/* TODO: fix those */ +#include "camera.h" +#include "mesh.h" +#include "object.h" +#include "scene.h" + #include "opengl/opengl.h" #include "vulkan/vk.h" @@ -14,12 +20,25 @@ static void display(); /* glfw callbacks */ static void key_clbk(GLFWwindow *win, int key, int scancode, int action, int mods); +static void motion_clbk(GLFWwindow *win, double x, double y); +static void mouse_clbk(GLFWwindow *win, int button, int action, int mods); /* global variables */ bool use_vulkan; + GLFWwindow *win; +int win_w = 800; +int win_h = 600; + +OrbitCamera *camera; /* variables */ +static float phi = 25; +static float theta = 0; +static float dist = 4; + +// TODO: remove just for test: +static Scene scene; int main(int argc, char **argv) { @@ -43,6 +62,8 @@ int main(int argc, char **argv) } glfwSetKeyCallback(win, key_clbk); + glfwSetCursorPosCallback(win, motion_clbk); + glfwSetMouseButtonCallback(win, mouse_clbk); while(!glfwWindowShouldClose(win)) { display(); @@ -57,6 +78,13 @@ int main(int argc, char **argv) static bool init() { + /* TODO */ + /* + TODO changes: + 1- create cam + 2- scene + 3- renderers + */ if(use_vulkan) { if(!init_vulkan()) return false; @@ -66,6 +94,21 @@ static bool init() return false; } + camera = new OrbitCamera; + camera->set_orbit_params(phi, theta, dist); + + if(!scene.load("data/spot/spot_control_mesh.obj")) { + fprintf(stderr, "Failed to load scene.\n"); + return false; + } + + for(size_t i=0; imesh->name.c_str()); + printf("material: %s\n", scene.objects[i]->material->name.c_str()); + printf("transform:\n"); + scene.objects[i]->transform.print(); + } return true; } @@ -77,6 +120,8 @@ static void cleanup() else { cleanup_opengl(); } + + delete camera; } static void key_clbk(GLFWwindow *win, int key, int scancode, int action, int mods) @@ -86,6 +131,41 @@ static void key_clbk(GLFWwindow *win, int key, int scancode, int action, int mod } } +static double prev_x, prev_y; +static int button; + +static void motion_clbk(GLFWwindow *win, double x, double y) +{ + switch(button) { + case GLFW_MOUSE_BUTTON_LEFT: + theta += x - prev_x; + phi += y - prev_y; + + if(phi < -90) + phi = -90; + if(phi > 90) + phi = 90; + + break; + + case GLFW_MOUSE_BUTTON_RIGHT: + dist *= (y - prev_y) * 0.01 + 1; + if(dist < 0.0) { + dist = 0.0; + } + break; + } + + prev_x = x; + prev_y = y; +} + +static void mouse_clbk(GLFWwindow *win, int bn, int action, int mods) +{ + button = bn; + glfwGetCursorPos(win, &prev_x, &prev_y); +} + static void display() { if(use_vulkan) { @@ -94,4 +174,4 @@ static void display() else { display_opengl(); } -} +} \ No newline at end of file