diff --git a/src/context.c b/src/context.c index 32b1f18..df0dc5c 100644 --- a/src/context.c +++ b/src/context.c @@ -4,8 +4,6 @@ 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/shaders.h b/src/data/shaders.h index 5ae40ac..07eac94 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -25,7 +25,7 @@ const char * vs = " index=idx;" " vec3 aNormal = vec3(aNormal_x,aNormal_y,aNormal_z);" " vec3 aPos = vec3(aPos_x,aPos_y,aPos_z);" - " Normal = mat3(transpose(inverse(rot*mdl))) * aNormal;" + " Normal = normalize(mat3(transpose(inverse(rot*mdl))) * aNormal);" " gl_Position = fix * rot * mdl * vec4( aPos, 1.0 );\n" " FragPos = vec3( rot * mdl * vec4(aPos, 1.0));" "}"; @@ -52,26 +52,26 @@ const char * fs = "uniform sampler2DArray palette;" "in float index;" - "out vec4 FragColor;" "in vec3 Normal;" "in vec3 FragPos;" - "uniform vec3 viewPos;\n" - "const float specularStrength = 0.5;\n" + + "out vec4 FragColor;" "void main()" "{" " vec4 color = texture(palette, vec3(0, 0, index));\n" - " vec3 lightPos = vec3(0, 0, -15);\n" - " vec3 lightDir = normalize(lightPos - FragPos);\n" - - " float diffuse = max(dot(Normal, lightDir), 0.0);\n" + " vec3 viewPos = vec3(0, 0, -15);\n" " vec3 viewDir = normalize(viewPos - FragPos);\n" + + " vec3 lightPos = viewPos\n;" + " vec3 lightDir = normalize(lightPos - FragPos);\n" " vec3 reflectDir = reflect(-lightDir, Normal);\n" - " float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);\n" - " vec3 specular = specularStrength * spec * vec3(1.0); \n" - " vec3 result = (0.5 + 0.5 * diffuse) * color.rgb + specular;\n" + " float specular = pow(max(dot(viewDir, reflectDir),0.0), 16);\n" + " float diffuse = max(dot(Normal, lightDir),0.0);\n" + + " vec3 result = (0.5 + 0.5 * diffuse + specular) * color.rgb;\n" " FragColor = vec4(result, color.a);\n" - "}"; \ No newline at end of file + "}"; diff --git a/src/mesh.c b/src/mesh.c index 21861c1..1b0758b 100755 --- a/src/mesh.c +++ b/src/mesh.c @@ -32,8 +32,8 @@ mesh_t create_mesh( float * d, float * n, unsigned char * coordanate, unsigned c glEnableVertexAttribArray(3); glGenBuffers( 1, &p->n_vbo ); - glBindBuffer( GL_ARRAY_BUFFER, p->n_vbo ); - glBufferData( GL_ARRAY_BUFFER, p->vertex*m*sizeof(float), n+1, + glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, p->n_vbo ); + glBufferData( GL_ELEMENT_ARRAY_BUFFER, p->vertex*m*sizeof(float), n+1, GL_STATIC_DRAW ); glVertexAttribPointer( 4,1,GL_FLOAT, 0, m*sizeof(float), (float*)(coordanate[0]*sizeof(float)) ); glEnableVertexAttribArray(4); diff --git a/src/surface.c b/src/surface.c index 40f67df..737a2ac 100644 --- a/src/surface.c +++ b/src/surface.c @@ -43,8 +43,9 @@ void klein(float *d_surface, int i, int j, int grid_size) float * generate_surface(int grid_size) { unsigned char m = 4; - long size = grid_size*grid_size*2*9*m; function_t f = klein; + + long size = grid_size*grid_size*6*m; float * d_surface; int k=0; @@ -55,14 +56,6 @@ float * generate_surface(int grid_size) { for (int j = 0; j < grid_size; j++) { - // triangle 1, front - f(&d_surface[k + 1], i, j, grid_size); - k+=m; - f(&d_surface[k + 1], i + 1, j, grid_size); - k+=m; - f(&d_surface[k + 1], i + 1, j + 1, grid_size); - k+=m; - // triangle 1, back f(&d_surface[k + 1], i + 1, j + 1, grid_size); k+=m; @@ -78,14 +71,6 @@ float * generate_surface(int grid_size) k+=m; f(&d_surface[k + 1], i + 1, j + 1, grid_size); k+=m; - - // triangle 2, back - f(&d_surface[k + 1], i + 1, j + 1, grid_size); - k+=m; - f(&d_surface[k + 1], i, j + 1, grid_size); - k+=m; - f(&d_surface[k + 1], i, j, grid_size); - k+=m; } }