diff --git a/Makefile b/Makefile index b0ce13a..6dae268 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ OBJ = \ CFLAGS = \ -I./ext/cglm/include \ -I./ext/glfw/include \ - -Wall -Wno-unused-function -std=c99 \ + -Wall -Wno-unused-function -std=c99 \ WAYLAND-LIB = \ xdg-shell \ @@ -38,6 +38,8 @@ help: @echo "Para ejecturar el programa sin instalarlos se puede usar:" @echo " $(MAKE) run-linux" +src/main.o: src/data/axis.h src/data/cube.h src/data/shaders.h + # WINDOWS windows: $(OBJ) glfw.dll $(CC) $(CFLAGS) $(OBJ) -o $(BIN) -L. -lglfw -lopengl32 -lglew32 @@ -62,15 +64,13 @@ cocoa: $(OBJ) $(MAKE) BKN=_GLFW_COCOA libglfw.so $(CC) -framework OpenGL -o $(BIN) $(OBJ) -L. -lGLEW -lGL -lglfw -libglfw.so: wayland.h - $(CC) -fPIC -shared -D$(BKN) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ - -wayland.h: +libglfw.so: 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 + $(CC) -fPIC -shared -D$(BKN) -D_GLFW_BUILD_DLL -Iext/glfw/deps/wayland ./ext/glfw/src/*.c -o $@ clean: rm $(OBJ) $(BIN) ext/glfw/deps/wayland/*.h diff --git a/src/context.c b/src/context.c index 40b19cb..32b1f18 100644 --- a/src/context.c +++ b/src/context.c @@ -4,6 +4,9 @@ void set_clean_color_context( unsigned char r, unsigned char g, unsigned char b ) { glEnable( GL_DEPTH_TEST ); + glEnable( GL_CULL_FACE ); + glCullFace( GL_BACK ); + glClearColor( (float)r/0xff, (float)g/0xff, (float)b/0xff, 1.0 ); } diff --git a/src/data/axis.h b/src/data/axis.h index 7f76ea5..db4adce 100644 --- a/src/data/axis.h +++ b/src/data/axis.h @@ -7,39 +7,35 @@ #undef G #undef H -const float X = 2.0; -const float Y = 0.05; -const float Z = 0.05; - -#define A -X,-Y,-Z, -#define B -X,-Y, Z, -#define C -X, Y,-Z, -#define D -X, Y, Z, -#define E X,-Y,-Z, -#define F X,-Y, Z, -#define G X, Y,-Z, -#define H X, Y, Z, +#define A -2.0,-0.05,-0.05, +#define B -2.0,-0.05, 0.05, +#define C -2.0, 0.05,-0.05, +#define D -2.0, 0.05, 0.05, +#define E 2.0,-0.05,-0.05, +#define F 2.0,-0.05, 0.05, +#define G 2.0, 0.05,-0.05, +#define H 2.0, 0.05, 0.05, narray_float_t d_axis = { 3*3*2*6, A C E - C E G + G E D E G F - G F H + H F G F H B - H B D + D B H B D A - D A C + C A D C D G - D G H + H G D - A B E + E B A B E F }; diff --git a/src/data/cube.h b/src/data/cube.h index a6cbb1f..bfa2756 100644 --- a/src/data/cube.h +++ b/src/data/cube.h @@ -1,5 +1,3 @@ -#include - #define A -1,-1,-1, #define B -1,-1, 1, #define C -1, 1,-1, @@ -9,43 +7,25 @@ #define G 1, 1,-1, #define H 1, 1, 1, -narray_float_t d_cube = +float d_cube[] = { 3*3*2*6, A C E - C E G + G E C E G F - G F H + H F G F H B - H B D + D B H B D A - D A C + C A D C D G - D G H + H G D - A B E + E B A B E F - - A C E - C E G - - E G F - G F H - - F H B - H B D - - B D A - D A C - - C D G - D G H - - A B E - B E F }; diff --git a/src/data/shaders.h b/src/data/shaders.h index 180e159..8e22431 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -37,14 +37,12 @@ const char * fs = "{" " vec4 color = texture( palette, vec3( 0, 0, index ) ).rgba;" - " vec3 lightColor = vec3(1,1,1);" - " vec3 lightPos = vec3(0,000,-15);" + " vec3 lightPos = vec3(0,0,-15);" " vec3 lightDir = normalize(lightPos - FragPos);" - " vec3 norm = normalize(Normal);" - " float diffuse = max(dot(norm, lightDir), 0.0);" + " float diffuse = max(dot(Normal, lightDir), 0.0);" " float ambient = 0.5;" - " FragColor = vec4((ambient + diffuse)*lightColor,1.0)*color;" + " FragColor = (ambient + diffuse)*color;" "}"; diff --git a/src/main.c b/src/main.c index 0399574..2f6f8a4 100755 --- a/src/main.c +++ b/src/main.c @@ -3,7 +3,9 @@ #include "data/axis.h" #include "data/shaders.h" #include - +#include +#include + #define WIDTH 512 #define HEIGHT 512 @@ -27,9 +29,11 @@ void calc_normal(float* v1, float* v2, float* v3, float* normal) glm_vec3_normalize(normal); } -void fill_normal( float * d, float * n ) +float * fill_normal( float * d ) { - //*n = *d; + float * n; + n = malloc( (*d+1)*sizeof(float)); + *n = *d; for (int i = 0; i < *d; i += 9) { @@ -39,12 +43,14 @@ void fill_normal( float * d, float * n ) glm_vec3_copy( norm_vec, (n+1)+i+3 ); glm_vec3_copy( norm_vec, (n+1)+i+6 ); } + return n; } const char * wname = "manigraph: manifold grapher"; int main( void ) { + float * n_cube, *n_axis; id_t shader, texture; mesh_t m_cube, m_axis; window_t window; @@ -57,8 +63,6 @@ int main( void ) glewInit(); - fill_normal( d_cube, d_cube+(int)*d_cube); - if( !( shader = create_shader() ) ) goto error_shader; @@ -68,12 +72,18 @@ int main( void ) load_fix_matrix( shader, (float)WIDTH/HEIGHT ); - if( !( m_cube = create_mesh( d_cube ) ) ) + n_cube = fill_normal( d_cube ); + n_axis = fill_normal( d_axis ); + + if( !( m_cube = create_mesh( d_cube, n_cube ) ) ) goto error_mesh_cube; - if( !( m_axis = create_mesh( d_axis ) ) ) + if( !( m_axis = create_mesh( d_axis, n_axis ) ) ) goto error_mesh_axis; + free( n_cube ); + free( n_axis ); + texture=create_palette_texture( palette ); use_texture( texture ); diff --git a/src/main.h b/src/main.h index 1fb5ea4..8252e56 100644 --- a/src/main.h +++ b/src/main.h @@ -23,7 +23,7 @@ int is_open_window(window_t window); void close_window(window_t window); -mesh_t create_mesh(narray_float_t mesh); +mesh_t create_mesh( float * d, float * n); void destroy_mesh(mesh_t p); diff --git a/src/matrix.c b/src/matrix.c index eda0e0c..10a097a 100644 --- a/src/matrix.c +++ b/src/matrix.c @@ -13,14 +13,14 @@ mat4 ortho[] = }, { { 0, 1, 0, 0 }, - { 1, 0, 0, 0 }, + {-1, 0, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 }, }, { { 0, 0, 1, 0 }, { 0, 1, 0, 0 }, - { 1, 0, 0, 0 }, + {-1, 0, 0, 0 }, { 0, 0, 0, 1 }, }, }; diff --git a/src/mesh.c b/src/mesh.c index d477d27..7ba7f28 100755 --- a/src/mesh.c +++ b/src/mesh.c @@ -4,10 +4,10 @@ struct obj { - unsigned int vertex, n_vao, d_vao, n_vbo, d_vbo; + unsigned int vertex, vao, n_vbo, d_vbo; }; -mesh_t create_mesh( narray_float_t d ) +mesh_t create_mesh( float * d, float * n ) { struct obj * p; @@ -15,24 +15,23 @@ mesh_t create_mesh( narray_float_t d ) p->vertex=(*d)/3; - glGenVertexArrays( 1, &p->n_vao ); - glGenVertexArrays( 1, &p->d_vao ); + glGenVertexArrays( 1, &p->vao ); + glGenBuffers( 1, &p->d_vbo ); - glGenBuffers( 1, &p->n_vbo ); - - glBindVertexArray( p->d_vao ); + glBindVertexArray( p->vao ); glBindBuffer( GL_ARRAY_BUFFER, p->d_vbo ); - glBufferData( GL_ARRAY_BUFFER, 2*(p->vertex*3)*sizeof(float), d+1, + glBufferData( GL_ARRAY_BUFFER, p->vertex*3*sizeof(float), d+1, GL_STATIC_DRAW ); - glVertexAttribPointer( 0,3,GL_FLOAT, 0, 3*sizeof(float), NULL ); glEnableVertexAttribArray(0); - - glVertexAttribPointer( 1,3,GL_FLOAT, *d, 3*sizeof(float), NULL ); + glGenBuffers( 1, &p->n_vbo ); + glBindBuffer( GL_ARRAY_BUFFER, p->n_vbo ); + glBufferData( GL_ARRAY_BUFFER, p->vertex*3*sizeof(float), n+1, + GL_STATIC_DRAW ); + glVertexAttribPointer( 1,3,GL_FLOAT, 0, 3*sizeof(float), NULL ); glEnableVertexAttribArray(1); - return p; } @@ -40,8 +39,7 @@ void destroy_mesh( mesh_t p ) { struct obj * obj ; obj = p; - glDeleteVertexArrays( 1, &obj->d_vao ); - glDeleteVertexArrays( 1, &obj->n_vao ); + glDeleteVertexArrays( 1, &obj->vao ); glDeleteBuffers( 1, &obj->d_vbo ); glDeleteBuffers( 1, &obj->n_vbo ); free( p ); @@ -51,7 +49,7 @@ void draw_mesh( mesh_t p ) { struct obj * obj=p; - glBindVertexArray( obj->d_vao ); + glBindVertexArray( obj->vao ); #ifdef DEBUG { int i;