aboutsummaryrefslogtreecommitdiff
path: root/src/point.c
diff options
context:
space:
mode:
authoramy <[email protected]>2023-04-18 07:20:59 +0000
committeramy <[email protected]>2023-04-18 07:20:59 +0000
commite7331cb0c98260c3bb979e4b58aed4a043e6299f (patch)
treeec634f718b546d30c77faed21995c06b827e7023 /src/point.c
parentc5112eebddcc7628cb6f3c8da7ad066e57961f16 (diff)
backup :p
Diffstat (limited to 'src/point.c')
-rw-r--r--src/point.c258
1 files changed, 138 insertions, 120 deletions
diff --git a/src/point.c b/src/point.c
index 4b07f72..c62be8c 100644
--- a/src/point.c
+++ b/src/point.c
@@ -9,21 +9,18 @@ typedef struct {
double z;
} cord;
typedef struct {
- int roll; //x axis
- int pitch; //y axis
- int yaw; //z axis
-} rot;
+ int r;
+ int g;
+ int b;
+} color;
typedef struct {
- float opacity;
-} opts;
-typedef struct {
- cord loc;
- rot rot;
- int uid;
- int id;
- opts opts;
+ cord at;
+ color color;
} point;
-
+typedef struct {
+ point* c;
+ double len;
+} point_arr;
double binominal(int n, int k){
if(n==k)
return 1.0;
@@ -55,9 +52,9 @@ void perspective_proj(GLFWwindow* b,cord* c, int len,double ctx,double cty,doubl
//double ctz = 0;
//cz=100-cz;
glColor3f(1.0f,0.0f,0.0f);
-
- GLfloat* pixels = malloc(sizeof(*pixels)*len*800*500*2);
-
+ GLfloat* pixels = malloc(sizeof(*pixels)*len*2);
+ if(pixels==NULL)
+ err("failed to allocate perspective array:(",pexit);
//glfwSwapBuffers(b);
//return;
@@ -76,7 +73,7 @@ void perspective_proj(GLFWwindow* b,cord* c, int len,double ctx,double cty,doubl
//double ez = 1/tan(fov/2);
//glBegin(GL_POINTS);
GLuint fb = 0;
- double ez=500; //i dont get this at all
+ double ez=get_h(); //i dont get this at all
//glGenFramebuffers(1,&fb);
for(int i = 0; i!=len; i++){
@@ -125,14 +122,17 @@ void perspective_proj(GLFWwindow* b,cord* c, int len,double ctx,double cty,doubl
//glEnd();
}
cord* basier3d(double*xx,double*yy,double*zz,int n){
- cord* pa = malloc(sizeof(*pa)*(3000));
+ cord* pa = malloc(sizeof(*pa)*(get_w()*30));
+ if(pa==NULL)
+ err("failed to allocate basier array",pexit);
//double xx[5] = {5.0,5.0,50.0,5.0,5.0};
//double yy[5] = {5.0,5.0,5.0,5.0,10.0};
//double zz[5] = {10.0,5.0,5.0,5.0,5.0};
//int n = 5-1;
n-=1;
- for(int iy = 0; iy<=100;iy+=1){
- double t = 0.01*iy;
+ double aaar = (1.0/get_w());
+ for(int iy = 0; iy<=get_w();iy+=1){
+ double t = aaar*iy;
double bcx = 0;
double bcy = 0;
double bcz = 0;
@@ -163,99 +163,87 @@ cord* basier3d(double*xx,double*yy,double*zz,int n){
//sdl_loop(b);
return pa;
}
-void join_cords(cord* a, cord* b, int a_len, int b_len){
- printf("%lu\n",sizeof(*a)*(a_len+b_len+2));
+int join_cords(cord* a, cord* b, int a_len, int b_len){
+ //printf("%lu\n",sizeof(*a)*(a_len+b_len+2));
a = realloc(a,sizeof(*a)*(a_len+b_len+2));
+ if(a==NULL)
+ err("failed to reallocate cords",pexit);
for(int i = 0; i<=a_len+b_len; i++){
a[a_len+i] = b[i];
}
+ return a_len+b_len;
}
-
-int main(){
- double xx[5] = {5.0,5.0,5.0};
- double yy[5] = {5.0,100.0,200.0};
- double zz[5] = {95.0,95.0,95.0};
- cord* a = basier3d(xx,yy,zz,3);
-
- double xx2[5] = {200.0,200.0,200.0};
- double yy2[5] = {5.0,100.0,200.0};
- double zz2[5] = {95.0,95.0,95.0};
- cord* b = basier3d(xx2,yy2,zz2,3);
+cord* square_gen(double* tl, double* tr, double* bl, double*br){
+ double xx[3] = {tl[0],tr[0]};
+ double yy[3] = {tl[1],tr[1]};
+ double zz[3] = {tl[2],tr[2]};
+ cord* a = basier3d(xx,yy,zz,2);
- double xx3[5] = {5.0,100.0,200.0};
- double yy3[5] = {5.0,5.0,5.0};
- double zz3[5] = {95.0,95.0,95.0};
- cord* c = basier3d(xx3,yy3,zz3,3);
+ double xx1[3] = {tl[0],bl[0]};
+ double yy1[3] = {tl[1],bl[1]};
+ double zz1[3] = {tl[2],bl[2]};
+ cord* b = basier3d(xx1,yy1,zz1,2);
- double xx4[5] = {5.0,100.0,200.0};
- double yy4[5] = {200.0,200.0,200.0};
- double zz4[5] = {95.0,95.0,95.0};
- cord* d = basier3d(xx4,yy4,zz4,3);
+ double xx2[3] = {tr[0],br[0]};
+ double yy2[3] = {tr[1],br[1]};
+ double zz2[3] = {tr[2],br[2]};
+ cord* c = basier3d(xx2,yy2,zz2,2);
- double xx5[5] = {5.0,100.0,200.0};
- double yy5[5] = {200.0,200.0,200.0};
- double zz5[5] = {290.0,290.0,290.0};
- cord* e = basier3d(xx5,yy5,zz5,3);
+ double xx3[3] = {bl[0],br[0]};
+ double yy3[3] = {bl[1],br[1]};
+ double zz3[3] = {bl[2],br[2]};
+ cord* d = basier3d(xx3,yy3,zz3,2);
- double xx6[5] = {5.0,100.0,200.0};
- double yy6[5] = {5.0,5.0,5.0};
- double zz6[5] = {290.0,290.0,290.0};
- cord* f = basier3d(xx6,yy6,zz6,3);
-
- double xx7[5] = {200.0,200.0,200.0};
- double yy7[5] = {5.0,100.0,200.0};
- double zz7[5] = {290.0,290.0,290.0};
- cord* g = basier3d(xx7,yy7,zz7,3);
-
- double xx8[5] = {5.0,5.0,5.0};
- double yy8[5] = {5.0,100.0,200.0};
- double zz8[5] = {290.0,290.0,290.0};
- cord* h = basier3d(xx8,yy8,zz8,3);
- //next
- double xx9[5] = {5.0,5.0,5.0};
- double yy9[5] = {200.0,200.0,200.0};
- double zz9[5] = {290.0,290.0,95.0};
- cord* ii = basier3d(xx9,yy9,zz9,3);
-
- double xx10[5] = {5.0,5.0,5.0};
- double yy10[5] = {5.0,5.0,5.0};
- double zz10[5] = {290.0,290.0,95.0};
- cord* j = basier3d(xx10,yy10,zz10,3);
-
- double xx11[5] = {200.0,200.0,200.0};
- double yy11[5] = {200.0,200.0,200.0};
- double zz11[5] = {290.0,290.0,95.0};
- cord* k = basier3d(xx11,yy11,zz11,3);
-
- double xx12[5] = {200.0,200.0,200.0};
- double yy12[5] = {5.0,5.0,5.0};
- double zz12[5] = {290.0,290.0,95.0};
- cord* l = basier3d(xx12,yy12,zz12,3);
- join_cords(a,b,100,100);
+ int ss = join_cords(a,b,get_w(),get_w());
+ ss = join_cords(a,c,ss,get_w());
+ ss = join_cords(a,d,ss,get_w());
free(b);
- join_cords(a,c,200,100);
free(c);
- join_cords(a,d,300,100);
free(d);
- join_cords(a,e,400,100);
- free(e);
- join_cords(a,f,500,100);
- free(f);
- join_cords(a,g,600,100);
- free(g);
- join_cords(a,h,700,100);
- free(h);
- join_cords(a,ii,800,100);
- free(ii);
- join_cords(a,j,900,100);
- free(j);
- join_cords(a,k,1000,100);
- free(k);
- join_cords(a,l,1100,100);
- free(l);
+ return a;
+}
+cord* cube_gen(double* tl, double* tr, double* bl, double*br,
+ double* tl2, double* tr2, double* bl2, double*br2){
+
+ double n_len = get_w()*4;
+ cord*a = square_gen(tl,tr,bl,br);
+ cord*b = square_gen(tl2,tr2,bl2,br2);
+ double s;
+ s = join_cords(a,b,n_len,n_len);
+ free(b);
+ cord*c = square_gen(tl2,tr2,tl,tr);
+ s = join_cords(a,c,s,n_len);
+ free(c);
+ cord*d = square_gen(bl2,br2,bl,br);
+ s = join_cords(a,d,s,n_len);
+ free(d);
+ cord*e = square_gen(tl,tl2,bl,bl2);
+ s = join_cords(a,e,s,n_len);
+ free(e);
+ cord*f = square_gen(br2,br,tr2,tr);
+ s = join_cords(a,f,s,n_len);
+ free(f);
+ return a;
+}
+int main(){
+ GLFWwindow* w = glfw_init();
+ refresh_size(w);
+ 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};
+ cord*a = cube_gen(tl1,tr1,bl1,br1,tl2,tr2,bl2,br2);
+ double s = get_w()*24;
+
+
int max_r = 630;
double half_max_r = (double)max_r/2/2;
- GLFWwindow* w = glfw_init();
+
//glfwSetKeyCallback(w,key_press);
double pl_x = 0;
double pl_y = 0;
@@ -269,40 +257,70 @@ int main(){
double p4 = pl_y;
double p5 = -pl_y+pl_z;
double p6 = pl_x;
- perspective_proj(w,a,1200,p1,p2,p3,p4,p5,p6);
+
+ perspective_proj(w,a,s,p1,p2,p3,p4,p5,p6);
glfw_load(w);
-
+ int mod_move=1;
+ double run_mul=2;
usleep(10000);
glfwPollEvents();
- if(glfwGetKey(w,GLFW_KEY_I))
- plr_x--;
- if(glfwGetKey(w,GLFW_KEY_K))
- plr_x++;
- if(glfwGetKey(w,GLFW_KEY_J))
- plr_y--;
- if(glfwGetKey(w,GLFW_KEY_L))
- plr_y++;
+ if(glfwGetKey(w,GLFW_KEY_I)){
+ if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT))
+ plr_x-=mod_move;
+ else
+ plr_x--;
+ }
+ if(glfwGetKey(w,GLFW_KEY_K)){
+ if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT))
+ plr_x+=mod_move;
+ else
+ plr_x++;
+ }
+ if(glfwGetKey(w,GLFW_KEY_J)){
+ if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT))
+ plr_y-=mod_move;
+ else
+ plr_y--;
+ }
+ if(glfwGetKey(w,GLFW_KEY_L)){
+ if(glfwGetKey(w,GLFW_KEY_LEFT_SHIFT))
+ plr_y+=mod_move;
+ else
+ plr_y++;
+ }
plr_x = fmod(plr_x,max_r);
plr_y = fmod(plr_y,max_r);
if(glfwGetKey(w,GLFW_KEY_W)){
- pl_x+=cosf(plr_y*0.01);
- pl_y+=sinf(plr_y*0.01);
- pl_z-=sinf(plr_x*0.01);
- printf("%f\n",pl_z);
+ 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;
+ //printf("%f\n",pl_z);
}
if(glfwGetKey(w,GLFW_KEY_S)){
- pl_x-=cosf(plr_y*0.01);
- pl_y-=sinf(plr_y*0.01);
- pl_z+=sinf(plr_x*0.01);
+ 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)){
- pl_x-=cosf((half_max_r+plr_y)*0.01);
- pl_y-=sinf((half_max_r+plr_y)*0.01);
+ 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)){
- pl_x+=cosf((half_max_r+plr_y)*0.01);
- pl_y+=sinf((half_max_r+plr_y)*0.01);
+ 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;
}
//printf("%f %f %f\n",plr_y,cosf(plr_y*0.01),sinf(plr_y*0.01));
glfw_clear(w);