diff --git a/Makefile b/Makefile index c4435ff..790cb3b 100644 --- a/Makefile +++ b/Makefile @@ -39,41 +39,28 @@ help: @echo " $(MAKE) CC=emcc wasm" @echo "Para limpiar los archivos compilados se puede usar" @echo " $(MAKE) clean" - @echo "Para ejecturar el programa sin instalarlos se puede usar:" - @echo " $(MAKE) run-linux" src/main.o: src/data/axis.h src/data/shaders.h -# WINDOWS -windows: $(OBJ) glfw.dll - $(CC) $(CFLAGS) $(OBJ) -o $(BIN) -L. -lglfw -lopengl32 -lglew32 +windows: $(OBJ) + cd ext; $(MAKE) -f glfw.mk windows; cd - + $(CC) $(CFLAGS) $(OBJ) -o $(BIN) -L. -lglfw -lopengl32 glfw.dll: $(CC) -fPIC -shared -D_GLFW_WIN32 -D_GLFW_BUILD_DLL ./ext/glfw/src/*.c -o $@ -lgdi32 -src/main.o: src/data/shaders.h src/data/axis.h - # LINUX linux-wayland: $(OBJ) - for i in $(WAYLAND-LIB); \ - do \ - wayland-scanner client-header ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol.h; \ - wayland-scanner private-code ext/glfw/deps/wayland/$$i.xml ext/glfw/deps/wayland/$$i-client-protocol-code.h; \ - done - $(MAKE) DFLAGS="-D_GLFW_WAYLAND" libglfw.so - $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -lm + cd ext; $(MAKE) -f glfw.mk linux-wayland; cd - + $(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lGL -lm linux-x11: $(OBJ) - $(MAKE) DFLAGS="-D_GLFW_X11" libglfw.so - $(CC) -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -lm + cd ext; $(MAKE) -f glfw.mk linux-x11; cd - + $(CC) -o $(BIN) $(OBJ) ext/libglfw.a -lGL -lm -run-linux: - LD_LIBRARY_PATH=. ./$(BIN) - -# COCOA cocoa: $(OBJ) - $(MAKE) DFLAGS="-D_GLFW_COCOA" libglfw.so - $(CC) -framework OpenGL -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw + cd ext; $(MAKE) -f glfw.mk cocoa; cd - + $(CC) -framework OpenGL -o $(BIN) $(OBJ) ext/glfw.a -lGL -lglfw wasm: $(OBJ) $(CC) -sUSE_WEBGL2=1 -sUSE_GLFW=3 -o $(BIN).js $(OBJ) @@ -83,9 +70,11 @@ libglfw.so: $(CC) -fPIC -shared $(DFLAGS) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ clean: - rm $(OBJ) $(BIN) ext/glfw/deps/wayland/*.h + rm $(OBJ) $(BIN) + cd ext; $(MAKE) -f glfw.mk clean; cd - + .SUFFIXES: .c .o -.c.o: src/main.h +.c.o: $(CC) $(CFLAGS) -c -o $@ $< diff --git a/ext/glfw.mk b/ext/glfw.mk new file mode 100644 index 0000000..3d03183 --- /dev/null +++ b/ext/glfw.mk @@ -0,0 +1,71 @@ +BIN = libglfw.a +OBJ = \ + glfw/src/context.o \ + glfw/src/egl_context.o \ + glfw/src/glx_context.o \ + glfw/src/init.o \ + glfw/src/input.o \ + glfw/src/linux_joystick.o \ + glfw/src/monitor.o \ + glfw/src/null_init.o \ + glfw/src/null_joystick.o \ + glfw/src/null_monitor.o \ + glfw/src/null_window.o \ + glfw/src/osmesa_context.o \ + glfw/src/platform.o \ + glfw/src/posix_module.o \ + glfw/src/posix_poll.o \ + glfw/src/posix_thread.o \ + glfw/src/posix_time.o \ + glfw/src/vulkan.o \ + glfw/src/wgl_context.o \ + glfw/src/win32_init.o \ + glfw/src/win32_joystick.o \ + glfw/src/win32_module.o \ + glfw/src/win32_monitor.o \ + glfw/src/win32_thread.o \ + glfw/src/win32_time.o \ + glfw/src/win32_window.o \ + glfw/src/window.o \ + glfw/src/wl_init.o \ + glfw/src/wl_monitor.o \ + glfw/src/wl_window.o \ + glfw/src/x11_init.o \ + glfw/src/x11_monitor.o \ + glfw/src/x11_window.o \ + glfw/src/xkb_unicode.o + +WAYLAND-LIB = \ + xdg-shell \ + relative-pointer-unstable-v1 \ + xdg-decoration-unstable-v1 \ + pointer-constraints-unstable-v1 \ + viewporter \ + idle-inhibit-unstable-v1 \ + fractional-scale-v1 \ + xdg-activation-v1 \ + wayland + +windows: + $(MAKE) $(OBJ) CFLAGS="-D_GLFW_WIN32 -Iglfw/deps/wayland" + $(AR) rsc $(BIN) $(OBJ) + +linux-x11: + $(MAKE) $(OBJ) CFLAGS="-D_GLFW_X11 -Iglfw/deps/wayland" + $(AR) rsc $(BIN) $(OBJ) + + +linux-wayland: + for i in $(WAYLAND-LIB); \ + do \ + wayland-scanner client-header glfw/deps/wayland/$$i.xml glfw/deps/wayland/$$i-client-protocol.h; \ + wayland-scanner private-code glfw/deps/wayland/$$i.xml glfw/deps/wayland/$$i-client-protocol-code.h; \ + done + $(MAKE) $(OBJ) CFLAGS="-D_GLFW_WAYLAND -fPIC -Iglfw/deps/wayland" + $(AR) rsc $(BIN) $(OBJ) + + + +clean: + rm $(OBJ) $(BIN) + rm glfw/deps/wayland/*.h diff --git a/src/input.c b/src/input.c index 76d85fe..319923a 100644 --- a/src/input.c +++ b/src/input.c @@ -112,13 +112,21 @@ void __mouse_callback_input( void __scroll_callback_input(GLFWwindow *window, double xoffset, double yoffset) { versor p = GLM_QUAT_IDENTITY_INIT; + versor r = GLM_QUAT_IDENTITY_INIT; - glm_quatv(p, yoffset * ANGLE, axis[selected_axis]); - + //glm_quatv(p, yoffset * ANGLE, axis[selected_axis]); + glm_quatv(p, yoffset * ANGLE * 2, (vec3){-1,0,0}); + glm_quatv(r, xoffset * ANGLE * 2, (vec3){0,1,0}); glm_quat_mul(p, q, q); + glm_quat_mul(r, q, q); + glm_quat_rotatev(p, axis[0], axis[0]); glm_quat_rotatev(p, axis[1], axis[1]); glm_quat_rotatev(p, axis[2], axis[2]); + + glm_quat_rotatev(r, axis[0], axis[0]); + glm_quat_rotatev(r, axis[1], axis[1]); + glm_quat_rotatev(r, axis[2], axis[2]); } quat_t poll_input(window_t window) diff --git a/src/main.h b/src/main.h index b939d5b..a14d487 100644 --- a/src/main.h +++ b/src/main.h @@ -4,8 +4,8 @@ error of the shaders. */ -/* #define DEBUG */ -/* #define GLAD */ +/* #define DEBUG */ +#define GLAD typedef const void * window_t; typedef unsigned int id_t; diff --git a/src/surface.c b/src/surface.c index 2acc0e8..79f75af 100644 --- a/src/surface.c +++ b/src/surface.c @@ -29,6 +29,14 @@ void riemman(float *d_surface, int * coords, int grid_size) } +void cube( float *d_surface, int * coord, int grid_size ) +{ + unsigned char i; + + for(int i=0; i<4; i++ ) + d_surface[i]=(float)coord[i]/grid_size; +} + void mobius(float *d_surface, int * coord, int grid_size) { const float width = 0.5; @@ -50,20 +58,6 @@ void torus(float *d_surface, int * coord, int grid_size) d_surface[2] = 0.5 * sin(v); } -void torus_5d(float *d_surface, int * coord, int grid_size) -{ - float u = (2 * M_PI) * ((float)coord[0] / grid_size); - float v = (2 * M_PI) * ((float)coord[1] / grid_size); - float r1 = (float)coord[2] / grid_size; - float r2 = (float)coord[3] / grid_size; - - d_surface[0] = (r1 + r2 * cos(v)) * cos(u); - d_surface[1] = (r1 + r2 * cos(v)) * sin(u); - d_surface[2] = r2 * sin(v); - d_surface[3] = r1; - d_surface[4] = r2; -} - void klein(float *d_surface, int * coord, int grid_size) { float u = (2 * M_PI) * ((float)coord[0] / grid_size); @@ -77,45 +71,84 @@ void klein(float *d_surface, int * coord, int grid_size) typedef void (*function_t)(float *, int *, int); -float *generate_data_surface(int grid_size, unsigned char *m) +float *generate_data_surface(int grid_size, unsigned char *s) { - unsigned int i, j, k = 0; - long size; + unsigned int i, j, k, o, p, l, n, m; + long size, q=0; function_t f; float *d_surface; - f = klein; - *m = 4; + const int dim =2; + int cara[dim]; + char bits[dim+1]; + bits[dim]=0; - size = grid_size * grid_size * 6 * (*m); + f =klein ; + *s = 4; + + size = grid_size * grid_size * 6 * (*s) * 24; d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; - - for (i = 0; i < grid_size; i++) - { - for (j = 0; j < grid_size; j++) + + for(o = 0; o < dim; o ++) + { + for (p = 0; p < o; p++) { - // triangle 1, Front - f(&d_surface[k + 1], (int[2]){i, j}, grid_size); - k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j}, grid_size); - k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size); - k += *m; + for (k = 0; k < (1 << (dim-2)); k++) + { + unsigned char skip=0; + for(n = 0; n < dim-2; n++) + { + if( n==(o-1) || n==p ) + skip++; - // triangle 2, Back - f(&d_surface[k + 1], (int[2]){i, j}, grid_size); - k += *m; - f(&d_surface[k + 1], (int[2]){i, j + 1}, grid_size); - k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size); - k += *m; + cara[n+skip] = (k & (1<