From d3c131db7b22e916d0b5aaa097ca8750a4063e93 Mon Sep 17 00:00:00 2001 From: amy Date: Wed, 3 May 2023 12:42:12 +0000 Subject: cleaning stuff --- src/glfww.c | 27 +- src/glfww.h | 23 +- src/point.c | 44 +-- src/point.c~ | 856 --------------------------------------------------------- src/sdlw.c.old | 62 ----- src/sdlw.h.old | 13 - src/strings.h | 11 +- src/util.c | 31 ++- src/util.h | 18 +- src/util.h~ | 29 -- 10 files changed, 73 insertions(+), 1041 deletions(-) delete mode 100644 src/point.c~ delete mode 100644 src/sdlw.c.old delete mode 100644 src/sdlw.h.old delete mode 100644 src/util.h~ (limited to 'src') diff --git a/src/glfww.c b/src/glfww.c index 3203bcd..09d1c82 100644 --- a/src/glfww.c +++ b/src/glfww.c @@ -1,8 +1,3 @@ -#include -#include "util.h" -#include -#include -#include #include "glfww.h" int w,h; @@ -25,7 +20,7 @@ GLFWwindow* glfw_init(){ int w,h; glfwGetFramebufferSize(window,&w,&h); glViewport(0,0,w,h); - info("yay:D i made a window uwu"); + logm("yay:D i made a window uwu"); return window; /* while(!glfwWindowShouldClose(window)){ @@ -46,7 +41,6 @@ GLFWwindow* glfw_init(){ } void refresh_size(GLFWwindow*wi){ glfwGetFramebufferSize(wi,&w,&h); - //printf("%i,%i\n",w,h); } int get_w(){ return w; @@ -119,6 +113,25 @@ void glfw_square(GLFWwindow* wi,int x, int y, int r){ } glEnd(); } +GLuint vshader_comp(const char* shader_src){ + GLuint vertid = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vertid,1,(const GLchar**)&shader_src, NULL); + glCompileShader(vertid); + return vertid; +} +GLuint fshader_comp(const char* shader_src){ + GLuint fragid = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fragid,1,(const GLchar**)&shader_src, NULL); + glCompileShader(fragid); + return fragid; +} +GLuint build_shader(GLuint vertid, GLuint fragid){ + GLuint progid = glCreateProgram(); + glAttachShader(progid,vertid); + glAttachShader(progid,fragid); + glLinkProgram(progid); + return progid; +} int __glw_main(){ GLFWwindow* w = glfw_init(); glfw_circle(w,50,50,20); diff --git a/src/glfww.h b/src/glfww.h index 63952ca..7510723 100644 --- a/src/glfww.h +++ b/src/glfww.h @@ -8,23 +8,26 @@ #include #ifndef __glfww_ #define __glfww_ - #define win_clean() glfwTerminate(); #define ab_to_vp(x,y,w,h,x1,y1) float x = 2 * ((float)x1/(w)) -1;\ float y = 2 * ((float)y1/(h)) -1; #define vp_to_ab(w,x1) ((float)x1 +1.0/2)*w -GLFWwindow* glfw_init(); #define glfw_load(w) glfwSwapBuffers(w); -void glfw_loop(GLFWwindow*window); -int get_h(); -int get_w(); -void glfw_pixel_partial(GLFWwindow*wi,int x, int y); -void glfw_clear(GLFWwindow*w); -void refresh_size(GLFWwindow*); #define glfw_pixel(wi,x,y)\ glBegin(GL_POINTS);\ glfw_pixel_partial(wi,x,y);\ glEnd(); -void glfw_circle(GLFWwindow* w,int x, int y, int r); -void glfw_circle_partial(GLFWwindow* w,int x, int y, int r); +GLuint vshader_comp(const char*); +GLuint fshader_comp(const char*); +GLuint build_shader(GLuint, GLuint); +GLFWwindow* glfw_init(); +void glfw_loop(GLFWwindow*); +int get_h(); +int get_w(); +void glfw_pixel_partial(GLFWwindow*,int, int); +void glfw_clear(GLFWwindow*); +void refresh_size(GLFWwindow*); + +void glfw_circle(GLFWwindow*,int, int, int); +void glfw_circle_partial(GLFWwindow*,int, int, int); #endif diff --git a/src/point.c b/src/point.c index 9adef40..39dd9b8 100644 --- a/src/point.c +++ b/src/point.c @@ -3,10 +3,9 @@ #include #include #include "glfww.h" +#include "util.h" #include -double NUU = 0.0; -double FL_DIS = 1e-10; -double NaN = 0.0f/0.0f; + typedef struct { double x; @@ -65,16 +64,7 @@ typedef struct { double vlen; double len; } point_arr; -double binomial(int n, int k){ - if(n==k) - return 1.0; - double v = 1.0; - for(int i = 1; i<=k; i++){ - v=v*((float)(n+1-i)/i); - } - return v; -} -int ma = 4; + typedef struct { GLfloat* at; @@ -85,7 +75,7 @@ typedef struct { int len; } glfl_m; GLuint prog; -const char* vshader_src = +static const char* vshader_src = "#version 330\n" "layout (location = 0) in vec3 pos;\n" "layout (location = 1) in vec3 color;\n" @@ -94,32 +84,14 @@ const char* vshader_src = "ncolor = color;\n" "gl_Position = vec4(pos,1.0);\n" "};"; -const char* fshader_src = +static const char* fshader_src = "#version 330\n" "in vec3 ncolor;\n" "out vec3 color;\n" "void main(){\n" "gl_FragColor = vec4(ncolor,1.0);\n" "};"; -GLuint vshader_comp(const char* shader_src){ - GLuint vertid = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertid,1,(const GLchar**)&shader_src, NULL); - glCompileShader(vertid); - return vertid; -} -GLuint fshader_comp(const char* shader_src){ - GLuint fragid = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragid,1,(const GLchar**)&shader_src, NULL); - glCompileShader(fragid); - return fragid; -} -GLuint build_shader(GLuint vertid, GLuint fragid){ - GLuint progid = glCreateProgram(); - glAttachShader(progid,vertid); - glAttachShader(progid,fragid); - glLinkProgram(progid); - return progid; -} + point_arr* basier2d(double*xx,double*yy,int n,float rr, float gg, float bb){ n-=1; @@ -711,7 +683,7 @@ int main(int argc,char*argv[]){ GLuint fid = fshader_comp(fshader_src); prog = build_shader(vid,fid); glUseProgram(prog); - info("built shaders"); + logm("built shaders"); /* @@ -851,6 +823,6 @@ int main(int argc,char*argv[]){ glDeleteShader(vid); glDeleteShader(fid); glDeleteShader(prog); - info("killed window:p"); + logm("killed window:p"); return 0; } diff --git a/src/point.c~ b/src/point.c~ deleted file mode 100644 index d587fb6..0000000 --- a/src/point.c~ +++ /dev/null @@ -1,856 +0,0 @@ -#include -#include -#include -#include -#include "glfww.h" -#include -double NUU = 0.0; -double FL_DIS = 1e-10; -double NaN = 0.0f/0.0f; - -typedef struct { - double x; - double y; - double z; - int vertex; -} cord; -cord poi_d(double x1,double y1,double x2, double y2,int len,GLfloat* pixels){ - double m1 = (y2-y1)/(x2-x1); - double b1 = y1 - m1 * x1; - cord aa; - aa.x = 0; - aa.y = 0; - aa.z = -1; - - int coll = 0; - for(int yyu = 0; yyu!=len-1; yyu++){ - - double x3 = pixels[yyu*2]; - double x4 = pixels[(yyu+1)*2]; - double y3 = pixels[yyu*2+1]; - double y4 = pixels[(yyu+1)*2+1]; - double m2 = (y4-y3)/(x4-x3); - - double b2 = y3 - m2 * x3; - - double nsx = (b2-b1)/(m1-m2); - double nsy = m1*nsx+b1; - - if(!(nsx >= greater(lesser(x1, x2), lesser(x3, x4)) && nsx <= lesser(greater(x1, x2), greater(x3, x4))) - - ||(diff(nsx,x2)c = malloc(sizeof(*pa->c)*(lle*60)); - pa->vert = malloc(sizeof(*pa->vert)*(n*60)); - - if(pa->c==NULL||pa->vert==NULL) - err("failed to allocate basier array",pexit); - - pa->len = lle; - for(int iy = 0; iy<=lle;iy+=1){ - double t = aaar*iy; - double bcx = 0; - double bcy = 0; - for(int i = 0; i <=n;i++){ - double pp = binomial(n,i) * pow((1 - t),(n - i)) * pow(t,i); - bcx += pp * xx[i]; - bcy += pp * yy[i]; - } - pa->c[iy].at.x = bcx; - pa->c[iy].at.y = bcy; - pa->c[iy].at.vertex = 0; - for(int as = 0; as<=n; as++){ - if(xx[as]==bcx&&yy[as]==bcy){ - pa->c[iy].at.vertex = 1; - break; - } - } - pa->c[iy].color.r = rr; - pa->c[iy].color.g = gg; - pa->c[iy].color.b = bb; - } - for(int i = 0; i<=n; i++){ - pa->vert[i].at.x = xx[i]; - pa->vert[i].at.y = yy[i]; - } - pa->vlen = n; - return pa; -} -typedef struct { - GLfloat* pix; - GLfloat* col; - int len; -} glfl_ar; -void render_p(glfl_ar* bba){ - GLuint verta; - glGenVertexArrays(1,&verta); - glBindVertexArray(verta); - - GLuint vetb; - glGenBuffers(1,&vetb); - glBindBuffer(GL_ARRAY_BUFFER,vetb); - glBufferData(GL_ARRAY_BUFFER,sizeof(*bba->pix)*(bba->len*3),bba->pix,GL_STATIC_DRAW); - - glEnableVertexAttribArray(0); - glBindBuffer(GL_ARRAY_BUFFER,vetb); - glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,(void*)0); - - GLuint colb; - glGenBuffers(1,&colb); - glBindBuffer(GL_ARRAY_BUFFER,colb); - glBufferData(GL_ARRAY_BUFFER,sizeof(*bba->col)*(bba->len*4),bba->col,GL_STATIC_DRAW); - - glEnableVertexAttribArray(1); - glBindBuffer(GL_ARRAY_BUFFER,colb); - glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,0,(void*)0); - - glDrawArrays(GL_POINTS,0,bba->len); - glDeleteBuffers(1,&vetb); - glDeleteBuffers(1,&colb); -} -glfl_ar* perspective_proj(GLFWwindow* b,point_arr* c,double ctx,double cty,double ctz,double cx, double cy, double cz){ - GLfloat* pixels = malloc(sizeof(*pixels)*((1+c->len)*4)); - GLfloat* colors = malloc(sizeof(*colors)*((1+c->len)*4)); - if(pixels==NULL||colors==NULL) - err("failed to allocate perspective array:(",pexit); - - double coy = cos(cty); - double siz = sin(ctz); - double coz = cos(ctz); - double six = sin(ctx); - double siy = sin(cty); - double cox = cos(ctx); - double fov = 0.002; - double ex = cx; - double ey = cy; - refresh_size(b); - GLuint fb = 0; - int c_len = 0; - //double ez=1/tan(fov/2); //i dont get this at all - double ez=get_w()*2; - glEnableClientState(GL_VERTEX_ARRAY); - - for(int i = 0; i!=c->len; i++){ - double ax = c->c[i].at.x; - double ay = c->c[i].at.y; - double az = c->c[i].at.z; - - double eyz = (coz*(ay-cy)-siz*ax-cx); - double yzm = (coy*(az-cz) + siy*(siz*(ay-cy) + coz*(ax-cx))); - double dx = coy * (siz*(ay-cy) + coz*(ax-cx)) - (siy*(az-cz)); - double dy = six * yzm + cox*eyz; - double dz = cox * yzm - six*eyz; - - double bx = ez/dz*dx+dx; - double by = ez/dz*dy+dy; - if(dz>-1){ - ab_to_vp(xa,ya,get_w(),get_h(),bx,by); - pixels[c_len*2] = xa+1; - pixels[c_len*2+1] = ya; - colors[c_len*3] = c->c[i].color.r; - colors[c_len*3+1] = c->c[i].color.g; - colors[c_len*3+2] = c->c[i].color.b; - c_len++; - } - } - - double fc_len = c_len; - for(int i = 0; i<=fc_len-1; i++){ - double x22[2] = {pixels[i*2],pixels[(i+1)*2]}; - double y22[2] = {pixels[i*2+1],pixels[(i+1)*2+1]}; - point_arr* bas = basier2d(x22,y22,2,0.1f,0.1f,0.1f); - for(int zaa=0; zaa<=bas->len; zaa++){ - pixels = realloc(pixels,sizeof *pixels *((c_len+1)*3)); - colors = realloc(colors,sizeof *colors *((c_len+1)*4)); - pixels[c_len*2] = bas->c[zaa].at.x; - pixels[c_len*2+1] = bas->c[zaa].at.y; - colors[c_len*3] = 0.1f; - colors[c_len*3+1] = 1.0f; - colors[c_len*3+2] = 1.0f; - c_len++; - } - free(bas->c); - free(bas->vert); - free(bas); - } - double dclen = c_len; - int vvi = 0; - - glfl_m* trline = malloc(sizeof(*trline)*get_w()*30); - trline->len = 0; - trline->at = malloc(sizeof(*trline->at)*get_w()*40); - for(int i = 0; i<=c->len; i++){ - if(c->c[i].at.vertex==1){ - if(pixels==NULL||colors==NULL) - abort(); - vvi++; - - trline->at[trline->len].at = malloc(sizeof(*trline->at[trline->len].at)*(c_len+get_w()*2)*30); - trline->at[trline->len].len = 0; - double ttt = -1.0; - int p_b = 0; - int p_b2 = 0; - int p_b3 = 0; - int p_b4 = 0; - double ttt2 = 1.0; - - int found1 = 1; - int found2 = 1; - - for(int jj = 0; jj<=dclen-1; jj++){ - float sad = 3.0f; - float sad2 = 30.0f; - if(pixels[jj*2](float)sad2/get_w() - &&diff(pixels[jj*2+1],pixels[i*2+1])<(float)sad/get_w()&&i!=jj){ - p_b=1; - if(pixels[jj*2]>ttt) - ttt=pixels[jj*2]; - - } - if(diff(pixels[jj*2],pixels[i*2])>(float)sad2/get_w() - &&diff(pixels[jj*2+1],pixels[i*2+1])<(float)sad/get_w()&&i!=jj&& - pixels[jj*2]>pixels[i*2]){ - p_b2=1; - - if(pixels[jj*2](float)sad/get_w() - &&diff(pixels[jj*2],pixels[i*2])<(float)sad2/get_w()&&i!=jj&&pixels[jj*2+1]>pixels[i*2+1]){ - p_b3=1; - } - if(diff(pixels[jj*2+1],pixels[i*2+1])>(float)sad/get_w() - &&diff(pixels[jj*2],pixels[i*2])<(float)sad2/get_w()&&i!=jj&&pixels[jj*2+1]at[trline->len].at); - - continue; - } - - - double cb = 1.0; - double sb = 1.0/get_w(); - double ib = cb/get_w(); - if(p_b) - for(double zz = pixels[i*2]; diff(zz,ttt)>ib&&zz>-1;zz-=(float)sb){ - pixels = realloc(pixels,sizeof *pixels *((c_len+1)*3)); - colors = realloc(colors,sizeof *colors *((c_len+1)*4)); - trline->at[trline->len].at[trline->at[trline->len].len*2] = zz; - trline->at[trline->len].at[trline->at[trline->len].len*2+1] = pixels[i*2+1]; - pixels[c_len*2] = zz; - pixels[c_len*2+1] = pixels[i*2+1]; - colors[c_len*3] = 0.1f; - colors[c_len*3+1] = vvi==3?0.1f:vvi==4?0.5f:1.0f; - colors[c_len*3+2] = 1.0f; - c_len++; - trline->at[trline->len].len++; - - - } - if(p_b2) - for(double zz = pixels[i*2]; diff(zz,ttt2)>ib&&zz<1;zz+=(float)sb){ - - pixels = realloc(pixels,sizeof *pixels *((c_len+1)*3)); - colors = realloc(colors,sizeof *colors *((c_len+1)*4)); - int brea = 0; - trline->at[trline->len].at[trline->at[trline->len].len*2] = zz; - trline->at[trline->len].at[trline->at[trline->len].len*2+1] = pixels[i*2+1]; - pixels[c_len*2] = zz; - pixels[c_len*2+1] = pixels[i*2+1]; - colors[c_len*3] = 0.1f; - colors[c_len*3+1] = vvi==3?0.1f:vvi==4?0.5f:1.0f; - colors[c_len*3+2] = 1.0f; - c_len++; - trline->at[trline->len].len++; - - } - - - trline->len++; - } - } - - if(trline->len>1){ - for(int ii = 0; ii!=trline->len-1; ii++){ - if(trline->at[ii].at[3]at[ii+1].at[3]){ - glfl_a temp = trline->at[ii]; - trline->at[ii] = trline->at[ii+1]; - trline->at[ii+1] = temp; - ii=-1; - } - - }} - double ffclen = c_len; - - double lmax_t = -2.0; - double lmin_t = 2.0; - double lmax2_t = -2.0; - double lmin2_t = 2.0; - for(int zzi = 0; zzi!=trline->len; zzi++){ - double max_t = -2.0; - double min_t = 2.0; - double max2_t = -2.0; - double min2_t = 2.0; - for(int zzi2 = 0; zzi2!=trline->at[zzi].len;zzi2++){ - if(max_tat[zzi].at[zzi2*2]){ - max_t = trline->at[zzi].at[zzi2*2]; - max2_t = trline->at[zzi].at[zzi2*2+1]; - } - if(min_t>=trline->at[zzi].at[zzi2*2]){ - min_t = trline->at[zzi].at[zzi2*2]; - min2_t = trline->at[zzi].at[zzi2*2+1]; - } - - } - - free(trline->at[zzi].at); - if (trline->at[zzi].len == 0) - continue; - if(lmax2_t!=max2_t&&lmin_t!=2.0&&lmax_t!=-2.0){ - - float color = (float)zzi/trline->len; - float color2 = 1.0f-((float)zzi/trline->len); - double di = pow(lmin_t-max_t,2)+pow(lmin2_t-max2_t,2);//sqrt should be used here - double di2 = pow(lmax_t-min_t,2)+pow(lmax2_t-min2_t,2); - double ux1, uy1, ux2, uy2; - int ma_to_mi = 0; - if (di > di2) { - ux1 = max_t; - uy1 = max2_t; - ux2 = lmin_t; - uy2 = lmin2_t; - ma_to_mi=1; - } else { - ux1 = min_t; - uy1 = min2_t; - ux2 = lmax_t; - uy2 = lmax2_t; - } - - color2 = 1.0f; - - double x1 = ma_to_mi?max_t:min_t; - double x2 = ma_to_mi?lmin_t:lmax_t; - double ite = ((float)get_w()/4); - - double ite1 = fabs(max_t/ite); - double ite2 = fabs(lmax_t/ite); - - double y1 = uy1; - double y2 = uy2; - - for(;(ma_to_mi?x1>=x2:x1<=x2);(ma_to_mi?(x1-=ite1):(x1+=ite2))){ - - cord aaaa = poi_d(x1,y1,x2,y2,fc_len,pixels); - - if(aaaa.z==1){ - continue; - } - double bb[] = {x1,x2}; - double bb2[] = {y1, y2}; - point_arr* asd = basier2d(bb,bb2,2,0.1,0.1,0.1); - - for(int lli = 0; lli!=asd->len; lli++){ - pixels = realloc(pixels,sizeof *pixels *((c_len+1)*4)); - colors = realloc(colors,sizeof *colors *((c_len+1)*5)); - double dd = 10; - - pixels[c_len*2] = asd->c[lli].at.x; - pixels[c_len*2+1] = asd->c[lli].at.y; - colors[c_len*3] = color2; - colors[c_len*3+1] = color;//vvi==3?0.1f:vvi==4?0.5f:1.0f; - colors[c_len*3+2] = 0.0f; - c_len++; - } - free(asd->c); - free(asd->vert); - free(asd); - break; - } - - } - lmax_t = max_t; - lmin_t = min_t; - lmax2_t = max2_t; - lmin2_t = min2_t; - } - free(trline->at); - free(trline); - glPointSize(4.0f); - - glfl_ar* rea = malloc(sizeof(*rea)); - rea->col = colors; - rea->pix = pixels; - rea->len = c_len; - - return rea; -} -point_arr* basier3d(double*xx,double*yy,double*zz,int n,float rr, float gg, float bb){ - point_arr* pa; - pa = malloc(sizeof(*pa)); - pa->c = malloc(sizeof(*pa->c)*(get_w()*60)); - pa->vert = malloc(sizeof(*pa->vert)*(n*60)); - - if(pa->c==NULL||pa->vert==NULL) - err("failed to allocate basier array",pexit); - n-=1; - - - double aaar = (1.0/get_w()); - double am = 2; - pa->len = am; - for(int iy = 0; iy<=2;iy+=1){ - double t = (1.0/am)*iy; - double bcx = 0; - double bcy = 0; - double bcz = 0; - for(int i = 0; i <=n;i++){ - double pp = binomial(n,i) * pow((1 - t),(n - i)) * pow(t,i); - bcx += pp * xx[i]; - bcy += pp * yy[i]; - bcz += pp * zz[i]; - } - pa->c[iy].at.x = bcx; - pa->c[iy].at.y = bcy; - pa->c[iy].at.z = bcz; - pa->c[iy].at.vertex = 0; - for(int as = 0; as<=n; as++){ - if(xx[as]==bcx&&yy[as]==bcy&&zz[as]==bcz){ - pa->c[iy].at.vertex = 1; - break; - } - } - pa->c[iy].color.r = rr; - pa->c[iy].color.g = gg; - pa->c[iy].color.b = bb; - } - for(int i = 0; i<=n; i++){ - pa->vert[i].at.x = xx[i]; - pa->vert[i].at.y = yy[i]; - pa->vert[i].at.z = zz[i]; - } - pa->vlen = n; - return pa; -} -void join_cords(point_arr* a, point_arr* b){ - int a_len = a->len; - int a_vlen = a->vlen; - a->c = realloc(a->c,sizeof(*a->c)*(a->len+b->len)*60); - a->vert = realloc(a->vert,sizeof(*a->vert)*(a->vlen+b->vlen)*60); - a->len+=b->len; - a->vlen+=b->vlen; - if(a->c==NULL) - err("failed to reallocate cords",pexit); - for(int i = 0; i<=b->len; i++){ - a->c[a_len+i].at = b->c[i].at; - a->c[a_len+i].color = b->c[i].color; - } - for(int i = 0; i<=b->vlen; i++){ - a->vert[a_vlen+i].at = b->vert[i].at; - } -} -void join_glfl_a(glfl_ar* a, glfl_ar* b){ - int a_len = a->len; - a->pix = realloc(a->pix,sizeof(*a->pix)*(a->len+b->len)*60); - a->col = realloc(a->col,sizeof(*a->col)*(a->len+b->len)*60); - - a->len+=b->len; - - if(a->pix==NULL||a->col==NULL) - err("failed to reallocate float array",pexit); - for(int i = 0; i<=b->len*2; i++){ - a->pix[a_len*2+i] = b->pix[i]; - } - for(int i = 0; i<=b->len*3; i++){ - a->col[a_len*3+i] = b->col[i]; - } -} -point_arr* polygon3d(double* vx, double*vy, double* vz, int n){ - double xx[2] = {vx[0],vx[1]}; - double yy[2] = {vy[0],vy[1]}; - double zz[2] = {vz[0],vz[1]}; - point_arr* y = basier3d(xx,yy,zz,2,1.0f,0.0f,0.5f); - for(int i = 1; i<=n-2; i++){ - double xx1[2] = {vx[i],vx[i+1]}; - double yy1[2] = {vy[i],vy[i+1]}; - double zz1[2] = {vz[i],vz[i+1]}; - point_arr* aa = basier3d(xx1,yy1,zz1,2,1.0f,0.0f,0.5f); - join_cords(y,aa); - free(aa->c); - free(aa->vert); - free(aa); - } - return y; -} -point_arr* square_gen(double* tl, double* tr, double* bl, double*br,float rr, float gg, float bb){ - double xx[3] = {tl[0],tr[0]}; - double yy[3] = {tl[1],tr[1]}; - double zz[3] = {tl[2],tr[2]}; - point_arr* a = polygon3d(xx,yy,zz,2); - - double xx1[3] = {tl[0],bl[0]}; - double yy1[3] = {tl[1],bl[1]}; - double zz1[3] = {tl[2],bl[2]}; - point_arr* b = polygon3d(xx1,yy1,zz1,2); - - double xx2[3] = {tr[0],br[0]}; - double yy2[3] = {tr[1],br[1]}; - double zz2[3] = {tr[2],br[2]}; - point_arr* c = polygon3d(xx2,yy2,zz2,2); - - double xx3[3] = {bl[0],br[0]}; - double yy3[3] = {bl[1],br[1]}; - double zz3[3] = {bl[2],br[2]}; - point_arr* d = polygon3d(xx3,yy3,zz3,2); - - join_cords(a,b); - join_cords(a,c); - join_cords(a,d); - free(b->c); - free(b->vert); - free(b); - free(c->c); - free(c->vert); - free(c); - free(d->c); - free(d->vert); - free(d); - return a; -} -void fill3d(point_arr* a){ - warn("please dont use this lol"); - double m_x = 0.0; - double m_y = 0.0; - double m_z = 0.0; - double mi_x = 0.0; - double mi_y = 0.0; - double mi_z = 0.0; - for(int i = 0; i<=a->len; i++){ - if(a->c[i].at.x>m_x) - m_x = a->c[i].at.x; - if(a->c[i].at.y>m_y) - m_y = a->c[i].at.y; - if(a->c[i].at.z>m_z) - m_z = a->c[i].at.z; - if(a->c[i].at.xc[i].at.x; - if(a->c[i].at.yc[i].at.y; - if(a->c[i].at.zc[i].at.z; - } - int a_l = a->len; - a->c = realloc(a->c,sizeof(*a->c)*(m_x*m_y+a->len)*60); - for(double y = mi_y; y<=m_y; y+=.1){ - - double* zz = malloc(sizeof(*zz)); - int zzl = 0; - double* xx = malloc(sizeof(*xx)); - double* yy = malloc(sizeof(*yy)); - for(int i = 0; i<=a_l; i++){ - - if(diff(a->c[i].at.y,y)<.1){ - zz = realloc(zz,sizeof(*zz)*(zzl+1)); - zz[zzl] = a->c[i].at.z; - xx = realloc(xx,sizeof(*xx)*(zzl+1)); - xx[zzl] = a->c[i].at.x; - yy = realloc(yy,sizeof(*yy)*(zzl+1)); - yy[zzl] = y; - zzl++; - } - } - point_arr* pp = basier3d(xx,yy,zz,zzl,1.0,0.0,0.0); - join_cords(a,pp); - free(pp->c); - free(pp); - free(xx); - free(yy); - free(zz); - } -} -point_arr* cube_gen(double* tl, double* tr, double* bl, double*br, - double* tl2, double* tr2, double* bl2, double*br2, - float rr, float gg, float bb){ - - point_arr* a = square_gen(tl,tr,bl,br,rr,gg,bb); - point_arr* b = square_gen(tl2,tr2,bl2,br2,rr,gg,bb); - double s; - join_cords(a,b); - free(b->c); - free(b->vert); - free(b); - point_arr* c = square_gen(tl2,tr2,tl,tr,rr,gg,bb); - join_cords(a,c); - - free(c->c); - free(c->vert); - free(c); - point_arr* d = square_gen(bl2,br2,bl,br,rr,gg,bb); - join_cords(a,d); - free(d->c); - free(d->vert); - free(d); - point_arr* e = square_gen(tl,tl2,bl,bl2,rr,gg,bb); - join_cords(a,e); - free(e->c); - free(e->vert); - free(e); - point_arr* f = square_gen(br2,br,tr2,tr,rr,gg,bb); - join_cords(a,f); - free(f->c); - free(f->vert); - free(f); - return a; -} -int main(int argc,char*argv[]){ - flag_handle(argc,argv); - atexit(sig_handle); - GLFWwindow* w = glfw_init(); - refresh_size(w); - GLenum err = glewInit(); - if (err != GLEW_OK) - exit(1); // or handle the error in a nicer way - if (!GLEW_VERSION_2_1) // check that the machine supports the 2.1 API. - exit(1); // or handle the error in a nicer way - GLuint vid = vshader_comp(vshader_src); - GLuint fid = fshader_comp(fshader_src); - prog = build_shader(vid,fid); - glUseProgram(prog); - info("built shaders"); - - - /* - double tl2[3] = {5.0,200.0,400.0}; - double tr2[3] = {200.0,200.0,400.0}; - double bl2[3] = {5.0,5.0,200.0}; - double br2[3] = {200.0,5.0,200.0}; - - double tl1[3] = {5.0,200.0,200.0}; - double tr1[3] = {200.0,200.0,200.0}; - double bl1[3] = {5.0,5.0,5.0}; - double br1[3] = {200.0,5.0,5.0}; - point_arr* a = cube_gen(tl1,tr1,bl1,br1,tl2,tr2,bl2,br2,0.1f,0.1f,1.0f); - */double xx[8] = {0.0, 15.0, 50.0, 60.0,40.0,30.0, 0.0,0.0}; - double yy[8] = {5.0, 15.0, 30.0, 45.0,64.0, 45.0,55.0,5.0}; - double zz[8] = {50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0}; - point_arr* a = polygon3d(xx,yy,zz,8); - - double xx2[8] = {0.0, 15.0, 50.0, 60.0,20.0,10.0, 0.0,0.0}; - double yy2[8] = {5.0, 15.0, 30.0, 20.0,64.0, 45.0,55.0,5.0}; - double zz2[8] = {50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0}; - point_arr* a2 = polygon3d(xx2,yy2,zz2,8); - - int max_r = 630; - double half_max_r = (double)max_r/2/2; - double pl_x = 0; - double pl_y = 0; - double pl_z = 0; - double plr_x = 0; - double plr_y = 0; - clock_t t; - double frames = 0; - t = clock(); - for(;;){ - - double p1 = plr_x*0.01; - double p2 = plr_y*0.01; - double p3 = 0; - double p4 = pl_y; - double p5 = -pl_y+pl_z; - double p6 = pl_x; - - glfl_ar* bba = perspective_proj(w,a,p1,p2,p3,p4,p5,p6); - render_p(bba); - free(bba->col); - free(bba->pix); - free(bba); - glfw_load(w); - int mod_move=2; - double run_mul=2; - glfwPollEvents(); - if(glfwGetKey(w,GLFW_KEY_R)){ - pl_x = 0; - pl_y = 0; - pl_z = 0; - plr_x = 0; - plr_y = 0; - } - if(glfwGetKey(w,GLFW_KEY_P)) - printf("(x:%f,y:%f,z:%f),rot(x:%f,y:%f,z:%f)||l(p1:%f,p2:%f,p3:%f,p4:%f,p5:%f,p6:%f)\n",pl_x,pl_y,pl_z,plr_x,plr_y,0.0,p1,p2,p3,p4,p5,p6); - if(glfwGetKey(w,GLFW_KEY_I)){ - if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT)) - plr_x-=mod_move; - else - plr_x--; - plr_x = fmod(plr_x,max_r); - } - if(glfwGetKey(w,GLFW_KEY_K)){ - if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT)) - plr_x+=mod_move; - else - plr_x++; - plr_x = fmod(plr_x,max_r); - } - if(glfwGetKey(w,GLFW_KEY_J)){ - if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT)) - plr_y-=mod_move; - else - plr_y--; - plr_y = fmod(plr_y,max_r); - } - if(glfwGetKey(w,GLFW_KEY_L)){ - if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT)) - plr_y+=mod_move; - else - plr_y++; - plr_y = fmod(plr_y,max_r); - } - - if(glfwGetKey(w,GLFW_KEY_W)){ - double mul = 1; - if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT)) - mul = run_mul; - pl_x+=cosf(plr_y*0.01)*mul; - pl_y+=sinf(plr_y*0.01)*mul; - pl_z-=sinf(plr_x*0.01)*mul; - } - if(glfwGetKey(w,GLFW_KEY_S)){ - double mul = 1; - if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT)) - mul = run_mul; - pl_x-=cosf(plr_y*0.01)*mul; - pl_y-=sinf(plr_y*0.01)*mul; - pl_z+=sinf(plr_x*0.01)*mul; - } - if(glfwGetKey(w,GLFW_KEY_A)){ - double mul = 1; - if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT)) - mul = run_mul; - pl_x-=cosf((half_max_r+plr_y)*0.01)*mul; - pl_y-=sinf((half_max_r+plr_y)*0.01)*mul; - } - if(glfwGetKey(w,GLFW_KEY_D)){ - double mul = 1; - if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT)) - mul = run_mul; - pl_x+=cosf((half_max_r+plr_y)*0.01)*mul; - pl_y+=sinf((half_max_r+plr_y)*0.01)*mul; - } - - usleep(1000*1000/60); - glfw_clear(w); - - if(glfwWindowShouldClose(w)||(glfwGetKey(w,GLFW_KEY_Q)))break; - frames+=1; - if(((double)clock() - t)/CLOCKS_PER_SEC > 1){ - printf("%f fps\n",frames); - frames=0; - t = clock(); - } - } - free(a->c); - free(a->vert); - free(a); - glfwDestroyWindow(w); - win_clean(); - glDeleteShader(vid); - glDeleteShader(fid); - glDeleteShader(prog); - info("killed window:p"); - return 0; -} diff --git a/src/sdlw.c.old b/src/sdlw.c.old deleted file mode 100644 index cfc2963..0000000 --- a/src/sdlw.c.old +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include -#include -#include "util.h" -#include "sdlw.h" -#define sdl_clear(r) SDL_SetRenderDrawColor(r,0,0,0,0);\ - SDL_RenderClear(r); -bw sdl_init(){ - if(SDL_Init(SDL_INIT_VIDEO)<0){ - err("failed to initialize sdl2 lib:(",pexit); - } - SDL_Renderer *r; - SDL_Window *w; - SDL_CreateWindowAndRenderer(400,400,0,&w,&r); - - if(!w) - err("failed to create window",pexit); - sdl_clear(r); - SDL_RenderPresent(r); - //SDL_Delay(5000); - bw both; - both.w =w; - both.r =r; - return both; -} -void sdl_loop(bw w){ - SDL_Event e; - //SDL_SetRenderDrawColor(w.r,255,0,0,255); - //for(int i = 0; i!=50;i++) - // SDL_RenderDrawPoint(w.r,i,i); - SDL_RenderPresent(w.r); - for(;;){ - while(SDL_PollEvent(&e) > 0){ - switch(e.type){ - case SDL_QUIT: - return; - } - - //SDL_UpdateWindowSurface(w.w); - } - } -} -void sdl_circle(bw w,int x, int y, int r){ - SDL_SetRenderDrawColor(w.r,255,255,0,0); - for(int i = 1; i!=360; i++){ - float cf = cosf(i); - float sf = sinf(i); - for(int z = 1; z<=r; z++){ - int x2 = x + z * cf; - int y2 = y + z * sf; - - SDL_RenderDrawPoint(w.r,x2,y2); - } - } -} -int main__2(){ - bw b = sdl_init(); - SDL_SetRenderDrawColor(b.r,255,255,0,0); - SDL_RenderDrawPoint(b.r,5,5); - sdl_loop(b); - return 0; -} diff --git a/src/sdlw.h.old b/src/sdlw.h.old deleted file mode 100644 index 7648d93..0000000 --- a/src/sdlw.h.old +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "util.h" -typedef struct { - SDL_Window* w; - SDL_Renderer* r; -} bw; -#define sdl_clear(r) SDL_SetRenderDrawColor(r,0,0,0,0);\ - SDL_RenderClear(r); -bw sdl_init(); -void sdl_loop(bw); -void sdl_circle(bw w,int x, int y, int r); diff --git a/src/strings.h b/src/strings.h index 7a6fb08..78f0d55 100644 --- a/src/strings.h +++ b/src/strings.h @@ -2,16 +2,7 @@ #include #ifndef __str__ #define __str__ -//#define init_str(buffer) (buffer); \ - {buffer = (char*)malloc(sizeof(char));\ - buffer[0]='\0';} -//#define str_size(str,sizeb) (sizeb); \ - for(sizeb=0;;sizeb++)if(str[sizeb]=='\0')break; -//#define str_push(str,ch)\ - int size_y = str_size(str);\ - str = (char*)realloc(str,sizeof(char*)*(size_y+1));\ - str[size_y]=ch;\ - str[size_y+1]='\0'; + typedef struct { char*str; int len; diff --git a/src/util.c b/src/util.c index 2ff7d7d..befff0d 100644 --- a/src/util.c +++ b/src/util.c @@ -4,11 +4,19 @@ #include #include "strings.h" double allocs = 0; -//#define malloc(X) mmalloc(X); +int forced_length = 15; +double binomial(int n, int k){ + if(n==k) + return 1.0; + double v = 1.0; + for(int i = 1; i<=k; i++){ + v=v*((float)(n+1-i)/i); + } + return v; +} void mmalloc(){ allocs++; } -//#define free(X) ffree(X); void ffree(){ allocs--; } @@ -19,6 +27,7 @@ void pexit(int s){ exit(s); } void sig_handle(void){ + if(log_level<=-1) return; if(allocs>0){ char ssa[45]; sprintf(ssa,"%s | (found %i)","uneven allocations, memory leak(s)",(int)nearbyint(allocs)); @@ -68,11 +77,11 @@ char* force_ca_length(char*inp,int len){ return nya; } void err_m(char*ca,void (*cb)(int),char*f,int l){ - if(log_level!=-1){ + if(log_level>-1){ int len = ca_size(f) + int_len(l); char nn[len]; sprintf(nn,"%s:%i",f,l); - char* aa = force_ca_length(nn,15); + char* aa = force_ca_length(nn,forced_length); printf("\x1b[90m%s \x1b[31m[ !err ]\x1b[0m %s\n",aa,ca); free(aa); } @@ -84,7 +93,7 @@ void warn_m(char*ca,char*f,int l,...){ int len = ca_size(f) + int_len(l); char nn[len]; sprintf(nn,"%s:%i",f,l); - char* aa = force_ca_length(nn,15); + char* aa = force_ca_length(nn,forced_length); printf("\x1b[90m%s \x1b[33m[ warn ]\x1b[0m %s\n",aa,ca); free(aa); } @@ -94,18 +103,18 @@ void info_m(char*ca,char*f,int l,...){ int len = ca_size(f) + int_len(l); char nn[len]; sprintf(nn,"%s:%i",f,l); - char* aa = force_ca_length(nn,15); + char* aa = force_ca_length(nn,forced_length); printf("\x1b[90m%s [ info ] %s\x1b[0m\n",aa,ca); free(aa); } void log_m(char*ca,char*f,int l,...){ - if(log_level<0) + if(log_level<2) return; int len = ca_size(f) + int_len(l); char nn[len]; sprintf(nn,"%s:%i",f,l); - char* aa = force_ca_length(nn,15); - printf("\x1b[35m%s [ log ] \x1b[0m%s\n",aa,ca); + char* aa = force_ca_length(nn,forced_length); + printf("\x1b[35m%s [ log ] \x1b[90m%s\x1b[0m\n",aa,ca); free(aa); } void flag_handle(int argc,char* argv[]){ @@ -117,10 +126,10 @@ void flag_handle(int argc,char* argv[]){ break; switch(argv[i][y]){ case 'q': - log_level=-1; + log_level-=1; break; case 'd':case 'v': - log_level=2; + log_level+=1; break; } } diff --git a/src/util.h b/src/util.h index aadf4fe..2a78785 100644 --- a/src/util.h +++ b/src/util.h @@ -1,15 +1,24 @@ #include #include #include +#include "string.h" #ifndef __util__ #define __util__ -#include "string.h" +static const double FL_DIS = 1e-10; +static const double NaN = 0.0f/0.0f; + #define greater(a,b) ((a)>(b)?(a):(b)) #define lesser(a,b) ((a)>(b)?(b):(a)) #define diff(a,b) ((a)>(b)?(a)-(b):(b)-(a)) #define malloc(X) malloc(X); mmalloc(); -void mmalloc(); #define free(X) free(X); ffree(); +#define err(s,f,...) err_m(s,f,__FILE__,__LINE__,##__VA_ARGS__); +#define warn(s) warn_m(s,__FILE__,__LINE__); +#define info(s) info_m(s,__FILE__,__LINE__); +#define logm(s) log_m(s,__FILE__,__LINE__); + +double binomial(int n, int k); +void mmalloc(); void ffree(); void err_m(char*,void (*)(int),char*,int); void warn_m(char*,char*,int ,...); @@ -21,9 +30,4 @@ unsigned int_len(const unsigned n); char* force_ca_length(char*inp,int len); void pexit(int s); -#define err(s,f,...) err_m(s,f,__FILE__,__LINE__,##__VA_ARGS__); -#define warn(s) warn_m(s,__FILE__,__LINE__); -#define info(s) info_m(s,__FILE__,__LINE__); -#define logm(s) log_m(s,__FILE__,__LINE__); - #endif diff --git a/src/util.h~ b/src/util.h~ deleted file mode 100644 index cc78d48..0000000 --- a/src/util.h~ +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include -#ifndef __util__ -#define __util__ -#include "string.h" -#define greater(a,b) (a>b?a:b) -#define lesser(a,b) (a>b?b:a) -#define diff(a,b) (a>b?a-b:b-a) -#define malloc(X) malloc(X); mmalloc(); -void mmalloc(); -#define free(X) free(X); ffree(); -void ffree(); -void err_m(char*,void (*)(int),char*,int); -void warn_m(char*,char*,int ,...); -void info_m(char*,char*,int ,...); -void log_m(char*ca,char*f,int l,...); -void flag_handle(int argc,char* argv[]); -void sig_handle(void); -unsigned int_len(const unsigned n); -char* force_ca_length(char*inp,int len); -void pexit(int s); - -#define err(s,f,...) err_m(s,f,__FILE__,__LINE__,##__VA_ARGS__); -#define warn(s) warn_m(s,__FILE__,__LINE__); -#define info(s) info_m(s,__FILE__,__LINE__); -#define logm(s) log_m(s,__FILE__,__LINE__); - -#endif -- cgit v1.2.3