From 9df9383b727f99814e7de0e2a0dc9f22e5694a40 Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Mon, 14 Aug 2023 12:04:45 +0200 Subject: [PATCH] =?UTF-8?q?REF:=20=20Dans=20un=20espace=20cubique=20de=20t?= =?UTF-8?q?aille=20quelconque,=20cubes=20et=20centres=20dessin=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/buffers.h | 11 ++- side = 11.png | Bin 0 -> 16897 bytes side = 21.png | Bin 0 -> 11467 bytes side = 5.png | Bin 0 -> 12358 bytes src/graphics/buffers.c | 154 +++++++++++++--------------------------- src/graphics/graphics.c | 137 +++++++++++++++++------------------ 6 files changed, 118 insertions(+), 184 deletions(-) create mode 100644 side = 11.png create mode 100644 side = 21.png create mode 100644 side = 5.png diff --git a/include/buffers.h b/include/buffers.h index d12b6e8..79abc6b 100644 --- a/include/buffers.h +++ b/include/buffers.h @@ -26,9 +26,9 @@ #include #include -bool compute_space(long model_space_size_x, - long model_space_size_y, - long model_space_size_z, +bool compute_space(int cube_side, +// long model_space_size_y, +// long model_space_size_z, GLuint *arrows, int model_arrows_nb, @@ -45,9 +45,6 @@ bool compute_space(long model_space_size_x, GLuint *plan_origin); bool draw_some_arrows (GLuint *lines_origin, - long s, long stx, long sty, + int s, int stx, int sty, GLuint *arrows, int arrows_nb); -void show_user_choices(long model_size_x, long model_size_y, long model_size_z, - GLuint *arrows, int model_arrows_nb, int pref_show_grid); - diff --git a/side = 11.png b/side = 11.png new file mode 100644 index 0000000000000000000000000000000000000000..310c05c4321bc7b590144dc54c41bbf8074c41e2 GIT binary patch literal 16897 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 literal 0 HcmV?d00001 diff --git a/side = 21.png b/side = 21.png new file mode 100644 index 0000000000000000000000000000000000000000..d71d8548ccdbdaa931161f7344e813a3e98d4ef7 GIT binary patch literal 11467 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
$yJyHKvw^n`?idY73(@wU=(VO{IW87 z_v=2_tGWjt59v>!G8ryCkv&wKyvM!w@OY_HfPa?eH+5ETYA?i!KO}=~bc&Cm>Lkli z?D5aR1PxJegk8=tNW69Fy4?a}ghDO#8%7x!NC4jad39r#r-MFlaYNPeD7F(0NSpyX zSpf1!%~k0ZaKVDJn=je4hG!_8{^rDi0)>_iNpxp6fs21}i%45guZov7YT5vR&A8AP z#JC!^F9{~qV@(kR0*SUeKelGS<*}+JwL4Wq?HjIq{CdO^khN{7xOQ=p!>1O-7~3KV zwtSdZaP9ayQ$fAxRc(L{jhQtl(!+MYYg}LT7ZmMoTldm4hoL9_olF&JLosB^mKVHt zwbxL3Sz)i9Ny9_3ceG3>281x}x7%9e{#a}H+lv1QN8hoL#m$7)yq12*%;WDd9I4H* ziK37DbHnFJU!8E#r2T+5r)L@2Enj^TeL`^2Yaei)_o3BkNU*2L%mO}l{65Fk5#Cbt z59&bJ98k2snQh#%N*%p-R#evB=%Cux$UJv&IXB?Xj7a1-UL{9XPc6`%GtCzul3$-$*xH#?gP9}2eGTDZgLaQ+vwJhVQVqXg%M^g8(CI|UM$(&Ffy<` z*=;M92)Fu6Bm(UvEGVcb(d$~P3#r{mHfnlpu+V!DAZ2TaMWCDn64u$2aOt%t)`p;j z_9VE5LV-5b-jxw+c64YhQz2REW#mOyVZaSZ(Q2H>iSW7PzZob$QdzaNNg0$Dg&UHl zeNo5QnWdj0l*IZ(#Mp&`f?{k1pB$Uz`Q%CB>)>e>s% zIKI4oXgA9mZ}Bb09ibAQfpH{V@{-cnHZEyRDP0TcbS1!MERv`B|GF1njTwEWfNMzj zp%t85U_9VC)%@|uw8w4wWuQ&0%k^FePPyE*f?X>t7hYPbXGc7o<{<|`9}knB$}J|WA%yAWS#EpiE= z9qg&n^-@G3Qmg7U0V|8Fw0I<*Lq=Z}45 z@A|6PO7AFr!)_89>xQ8K!?ydvr?)hziutD-Oogu)NA{FAI*+Ct&Gb|R+R_Iqd#9x^ z>N+$*{0cLe4|vmfTe#}p`X9-EXHrZw?wWU$9i|HA1YI=w>OhTIC(;^|D-OmK>V4lb zPAw31;{dQkmxeLwp7Y6vKZ1>F?4VP{Uqv`wyh+31MK}FtF(w6m2zt+({Y%EEOh
    !U6lnI(2*^0;OwDb}uomd3TLRVKYM4g+ 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
    @5XURjuY1MAJoj=hGQyQmGk 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 literal 0 HcmV?d00001 diff --git a/side = 5.png b/side = 5.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b07417c9c079a0996320b5c6919d5b0dbf97b9 GIT binary patch literal 12358 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 literal 0 HcmV?d00001 diff --git a/src/graphics/buffers.c b/src/graphics/buffers.c index ca4dd62..e8aca25 100644 --- a/src/graphics/buffers.c +++ b/src/graphics/buffers.c @@ -18,7 +18,7 @@ * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . + * aint with this program. If not, see . */ //#pragma once @@ -41,14 +41,14 @@ #include "../../include/graphics.h" #include "../../include/buffers.h" -static long vertex_index = 0; -static long colors_index = 0; -static long lines_index = 0; -static long plans_index = 0; +static int vertex_index = 0; +static int colors_index = 0; +static int lines_index = 0; +static int plans_index = 0; -static bool grids_intersections (long x, long y, long z, +static bool grids_intersections (int x, int y, int z, GLfloat *vertex_origin, GLfloat *colors_origin) { @@ -87,7 +87,7 @@ static bool grids_intersections (long x, long y, long z, } -static bool central_stars (long x, long y, long z, +static bool central_stars (int x, int y, int z, GLfloat *vertex_origin, GLfloat *colors_origin) { @@ -158,13 +158,13 @@ static bool central_stars (long x, long y, long z, vertex_index += 3; *(colors_origin + colors_index + 0) = 1.0f; - *(colors_origin + colors_index + 1) = 1.3f; + *(colors_origin + colors_index + 1) = 0.3f; *(colors_origin + colors_index + 2) = 0.3f; colors_index += 3; *(colors_origin + colors_index + 0) = 1.0f; - *(colors_origin + colors_index + 1) = 1.3f; + *(colors_origin + colors_index + 1) = 0.3f; *(colors_origin + colors_index + 2) = 0.3f; colors_index += 3; @@ -184,14 +184,14 @@ static bool central_stars (long x, long y, long z, vertex_index += 3; - *(colors_origin + colors_index + 0) = 0.3f; - *(colors_origin + colors_index + 1) = 1.3f; + *(colors_origin + colors_index + 0) = 1.0f; + *(colors_origin + colors_index + 1) = 0.3f; *(colors_origin + colors_index + 2) = 0.3f; colors_index += 3; - *(colors_origin + colors_index + 0) = 0.3f; - *(colors_origin + colors_index + 1) = 1.3f; + *(colors_origin + colors_index + 0) = 1.0f; + *(colors_origin + colors_index + 1) = 0.3f; *(colors_origin + colors_index + 2) = 0.3f; colors_index += 3; @@ -203,7 +203,7 @@ static bool central_stars (long x, long y, long z, } -static bool centers (long x, long y, long z, +static bool centers (int x, int y, int z, GLfloat *vertex_origin, GLfloat *colors_origin) { float max = fmax(x, y); @@ -264,8 +264,8 @@ static void draw_line (GLuint *lines_origin, int a, int b) } -static void draw_ridges_3D (long x, long y, long z, - long step_x, long step_y, long step_z, +static void draw_ridges_3D (int x, int y, int z, + int step_x, int step_y, int step_z, GLuint *lines_origin) { draw_line (lines_origin, step_z * 0 + step_y * 0 + step_x * 0, step_z * 0 + step_y * 0 + step_x * x); @@ -283,8 +283,8 @@ static void draw_ridges_3D (long x, long y, long z, } -static bool draw_grids_3D (long x, long y, long z, - long step_x, long step_y, long step_z, +static bool draw_grids_3D (int x, int y, int z, + int step_x, int step_y, int step_z, GLuint *lines_origin, int pref_show_grid) { @@ -325,8 +325,8 @@ static bool draw_grids_3D (long x, long y, long z, -static void diagonal_test(long x, long y, long z, - long step_x, long step_y, long step_z, +static void diagonal_test(int x, int y, int z, + int step_x, int step_y, int step_z, GLuint *lines_origin) { draw_line (lines_origin, 0, step_z * z + step_y * y + step_x * x); @@ -336,15 +336,23 @@ static void diagonal_test(long x, long y, long z, -static void draw_a_central_star(GLuint *lines_origin, long n) +static void draw_a_central_star(GLuint *lines_origin, int n) { draw_line (lines_origin, n + 0, n + 1); draw_line (lines_origin, n + 2, n + 3); draw_line (lines_origin, n + 4, n + 5); } -static void draw_a_central_star_in_a_cube(GLuint *lines_origin, long n, int side_size) +static void draw_a_central_star_in_a_cubic_space(GLuint *lines_origin, int n, int side_size) { +/* DANS UN CUBE DE COTE 3 LE CENTRE EST À 3 x 3 x 3 = 27 / 2 = 13,5 >> 13 * 6 + * DANS UN CUBE DE COTE 5 LE CENTRE EST À 5 x 5 x 5 = 125 / 2 = 62,5 >> 62 * 6 + * DANS UN CUBE DE COTE 7 LE CENTRE EST À 7 x 7 x 7 = 342 / 2 = 171,5 >> 171 * 6 + * ETC. + * JE CHOISIS DES CUBES AYANT DES COTÉS IMPAIRS POUR QU'IL Y AIT UNE CASE CENTRALE + */ + int s = side_size * side_size * side_size / 2; + draw_a_central_star(lines_origin, n + s * 6); } // I'm standing on Earth (any planet or star or spinning spheroid, in fact) @@ -357,48 +365,34 @@ static void draw_a_central_star_in_a_cube(GLuint *lines_origin, long n, int side #define SOUTH 4 // + z jaune #define NORTH 5 // - z bleu -bool draw_some_arrows (GLuint *lines_origin, long s, long stx, long sty, +bool draw_some_arrows (GLuint *lines_origin, int s, int stx, int sty, GLuint *arrows, int arrows_nb) {return 1;} -bool compute_space(long space_x, long space_y, long space_z, +bool compute_space(int cube_side, GLuint *arrows, int model_arrows_nb, int pref_show_grid, int pref_test_diagonal, GLfloat *vertex_origin, GLfloat *colors_origin, GLuint *lines_origin, GLuint *plans_origin) { - grids_intersections (space_x, space_y, space_z, vertex_origin, colors_origin); - central_stars (space_x, space_y, space_z, vertex_origin, colors_origin); - centers (space_x, space_y, space_z, vertex_origin, colors_origin); + grids_intersections (cube_side, cube_side, cube_side, vertex_origin, colors_origin); + central_stars (cube_side, cube_side, cube_side, vertex_origin, colors_origin); + centers (cube_side, cube_side, cube_side, vertex_origin, colors_origin); - long step_z = 1, step_y = space_z + 1, step_x = (space_z + 1) * (space_y + 1); + int step_z = 1, step_y = cube_side + 1, step_x = (cube_side + 1) * (cube_side + 1); - draw_grids_3D (space_x, space_y, space_z, step_x, step_y, step_z, lines_origin, pref_show_grid); - if (pref_show_grid > 0) draw_ridges_3D (space_x, space_y, space_z, step_x, step_y, step_z, lines_origin); - long s = step_z * space_z + step_y * space_y + step_x * space_x + 1; - int side_size = space_x; /* IT IS A CUBE ! space_x = space_y = space_z */ - draw_a_central_star_in_a_cube (lines_origin, s, side_size); + if (pref_show_grid > 0) draw_ridges_3D (cube_side, cube_side, cube_side, step_x, step_y, step_z, lines_origin); + draw_grids_3D (cube_side, cube_side, cube_side, step_x, step_y, step_z, lines_origin, pref_show_grid); + int s = step_z * cube_side + step_y * cube_side + step_x * cube_side + 1; + int side_size = cube_side; /* IT IS A CUBE ! space_x = space_y = space_z */ + draw_a_central_star_in_a_cubic_space (lines_origin, s, side_size); + if (0) for (int i = 0; i < side_size * side_size * side_size; i ++) + draw_a_central_star (lines_origin, s + i * 6); - draw_a_central_star (lines_origin, s + 13 * 6); +// draw_line (lines_origin, 3500, 2422);// further experiments... -/* DANS UN CUBE DE COTE 3 LE CENTRE EST À 3 x 3 x 3 = 27 / 2 = 14 >> 13 * 6 - * DANS UN CUBE DE COTE 5 LE CENTRE EST À 5 x 5 x 5 = 125 / 2 = 62 >> 62 * 6 - * DANS UN CUBE DE COTE 7 LE CENTRE EST À 7 x 7 x 7 = 342 / 2 = 171 >> 171 * 6 - * JE CHOISIS DES CUBES AYANT DES COTÉS IMPAIRS POUR QU'IL Y AIT UNE CASE CENTRALE - */ - - - - -// draw_line (lines_origin, 2800, 3500); -// draw_line (lines_origin, 3500, 2422);// -// draw_line (lines_origin, 3500, 2606); - - - - - if (pref_test_diagonal) diagonal_test (space_x, space_y, space_z, step_x, step_y, step_z, lines_origin); + if (pref_test_diagonal) diagonal_test (cube_side, cube_side, cube_side, step_x, step_y, step_z, lines_origin); return 0; } @@ -411,59 +405,9 @@ bool compute_space(long space_x, long space_y, long space_z, +// S C O R I E S --------------------------------------------------- - - - - - - - - - - - - - - -// S C O R I E S -------------------------------------------------------- - - -// draw_a_central_star (lines_origin, s + 1 + 3 * (29 * 2 * 6)); // OK NORTH 58 -// draw_a_central_star (lines_origin, s + 1 + 3 * (19 * 3 * 6)); // CENTRE 57 -// draw_a_central_star (lines_origin, s + 1 + 3 * ( 7 * 8 * 6)); // OK SOUTH 56 -// draw_a_central_star (lines_origin, s + 1 + 3 * (106 * 6 )); // Ok EAST 19 x 3 + 7 x 7 (57 + 49) -// draw_a_central_star (lines_origin, s + 1 + 3 * (8 * 6)); // OK WEST 19 x 3 - 7 x 7 (57 - 49) -// draw_a_central_star (lines_origin, s + 1 + 3 * (15 * 6)); // W Z -// draw_a_central_star (lines_origin, s + 1 + 3 * (1 * 6)); // W A -// draw_a_central_star (lines_origin, s + 1 + 3 * (49 * 6)); // S A -// draw_a_central_star (lines_origin, s + 1 + 3 * (7 * 6)); // W S -// draw_a_central_star (lines_origin, s + 1 + 3 * (9 * 6)); // W N -// draw_a_central_star (lines_origin, s + 1 + 3 * (105 * 6)); // E S -// draw_a_central_star (lines_origin, s + 1 + 3 * (19 * 6 * 6 - 12)); // E A S -// draw_a_central_star (lines_origin, s + 1 + 3 * (49 * 2 * 6)); // E A S -// draw_a_central_star (lines_origin, s + 1 + 3 * (19 * 6 * 6)); // E Z S << Last One -// draw_a_central_star (lines_origin, s + 1 + 3 * (19 * 6 * 6 - 6)); // E A - - -// draw_a_central_star (lines_origin, s + 1 + 3 * (19 * 6 * 4)); // - -// draw_a_central_star (lines_origin, s + 1 + 171 * 6); - // 4 x 6 = W 10 x 6 = A 14 x 6 = N - // 1 x 6 = WA 3 x 6 = WS 9 x 6 = AS 15 x 6 = ZS 21 x 6 = ES - // 0 x 6 = WAS 2 x 6 = WAN 6 x 6 = WZS 8 x 6 = WZN 12 x 6 = EZS - // 27 x 6 > out - -// if (0) draw_some_arrows_demo (lines_origin, s, space_x, space_y, space_z, arrows, model_arrows_nb); -// if (0) draw_some_arrows (lines_origin, s, space_z * space_y, space_z, arrows, model_arrows_nb); - - -// X - X = EAST - WEST = rouge - cyan -// Y - Y = ZENITH - NADIR = vert - magenta -// Z - Z = SOUTH - NORTH = jaune - bleu - - -/* static void draw_an_arrow_East_or_West (GLuint *lines_origin, long s, int weight, int site) */ +/* static void draw_an_arrow_East_or_West (GLuint *lines_origin, int s, int weight, int site) */ /* { */ /* draw_line (lines_origin, s + 2, s + 6 + site % 2); */ /* draw_line (lines_origin, s + 3, s + 6 + site % 2); */ @@ -472,7 +416,7 @@ bool compute_space(long space_x, long space_y, long space_z, /* draw_line (lines_origin, s + 5, s + 6 + site % 2); */ /* } */ -/* static void draw_an_arrow_Zenith_or_Nadir (GLuint *lines_origin, long s, int weight, int site) */ +/* static void draw_an_arrow_Zenith_or_Nadir (GLuint *lines_origin, int s, int weight, int site) */ /* { */ /* draw_line (lines_origin, s + 0, s + 8 + site % 2); */ /* draw_line (lines_origin, s + 1, s + 8 + site % 2); */ @@ -481,7 +425,7 @@ bool compute_space(long space_x, long space_y, long space_z, /* draw_line (lines_origin, s + 5, s + 8 + site % 2); */ /* } */ -/* static void draw_an_arrow_North_or_South (GLuint *lines_origin, long s, int weight, int site) */ +/* static void draw_an_arrow_North_or_South (GLuint *lines_origin, int s, int weight, int site) */ /* { */ /* draw_line (lines_origin, s + 0, s + 10 + site % 2); */ /* draw_line (lines_origin, s + 1, s + 10 + site % 2); */ diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index d9f3650..871435e 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -20,7 +20,7 @@ * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . + * aint with this program. If not, see . */ #include @@ -47,12 +47,10 @@ /* ----------------- V A R I A B L E S G L O B A L E S ------------------ */ -// int model_dim; < INUTILE : dim est fonction de model_space_size_x, y ,z) */ -long model_space_size_x = 0; -long model_space_size_y = 0; -long model_space_size_z = 0; -long arrows_nb = 0; -long central_stars_nb = 0; +// int model_dim; < INUTILE : dim est fonction de cube_side, y ,z) */ +int cube_side = 0; +int arrows_nb = 0; +int central_stars_nb = 0; GLfloat *buffer_vertex_origin = NULL; GLfloat *buffer_colors_origin = NULL; @@ -67,10 +65,10 @@ GLuint *buffer_plans_origin = NULL; int pref_show_grid = 0; // 0, 1, 2, 3, 5, 6, 10, 15, 30, etc int pref_test_diagonal = 0; // diagonal test -long buffer_vertex_size = 0; -long buffer_colors_size = 0; -long buffer_lines_size = 0; // previously in graphics.h struct gl_area_entry.GLuint line_indices_nb; -long buffer_plans_size = 0; // previously in graphics.h struct gl_area_entry.GLuint plan_indices_nb; +int buffer_vertex_size = 0; +int buffer_colors_size = 0; +int buffer_lines_size = 0; // previously in graphics.h struct gl_area_entry.GLuint line_indices_nb; +int buffer_plans_size = 0; // previously in graphics.h struct gl_area_entry.GLuint plan_indices_nb; /* ----------------- O P E N G L D E B U G M E S S A G E S ------------ */ @@ -555,23 +553,26 @@ GLuint arrows[] = { static void get_model_data_and_user_preferences(){ +/* DANS UN CUBE DE COTE 3 LE CENTRE EST À 3 x 3 x 3 = 27 / 2 = 14 >> 13 * 6 + * DANS UN CUBE DE COTE 5 LE CENTRE EST À 5 x 5 x 5 = 125 / 2 = 62 >> 62 * 6 + * DANS UN CUBE DE COTE 7 LE CENTRE EST À 7 x 7 x 7 = 342 / 2 = 171 >> 171 * 6 + * JE CHOISIS DES CUBES AYANT DES COTÉS IMPAIRS POUR QU'IL Y AIT UNE CASE CENTRALE + */ - model_space_size_x = 3; // 0 < model_space_size_x - model_space_size_y = 3; // 0 < model_space_size_y - model_space_size_z = 3; // 0 < model_space_size_z + cube_side = 5; // 0 < cube_side - long arrows_array_size = 0; + int arrows_array_size = 0; while (*(arrows + arrows_array_size) != un_nombre_ad_hoc_que_je_mets_a_la_fin_du_tableau_pour_en_mesurer_la_taille) arrows_array_size ++; - printf("get_model_data_and_user_preferences (566) arrows_array_size = %ld (arrows_nb = %ld)\n", arrows_array_size, arrows_array_size / 5); + printf("get_model_data_and_user_preferences (566) arrows_array_size = %d (arrows_nb = %d)\n", arrows_array_size, arrows_array_size / 5); arrows_nb = arrows_array_size / 5; // assert : l'emplacement des flèches est contraint par space_size_x, y, z et le nombre de sites - central_stars_nb = 1; - pref_show_grid = 1; // 0, 1, 2, 3, 5, 6, 10, 15, 30, etc + central_stars_nb = cube_side * cube_side * cube_side; + pref_show_grid = 0; // 0, 1, 2, 3, 5, 6, 10, 15, 30, etc // xyz, 0, x, y, z, xy, xz, yz, xyz - pref_test_diagonal = 1; + pref_test_diagonal = 0; } @@ -579,23 +580,21 @@ static void get_model_data_and_user_preferences(){ -static void compute_buffers_sizes(int model_space_size_x, - int model_space_size_y, - int model_space_size_z, +static void compute_buffers_sizes(int cube_side, int pref_test_diagonal) { // XXX ONLY space and no arrows - long grids_intersections = (model_space_size_x + 1) - * (model_space_size_y + 1) - * (model_space_size_z + 1); + int grids_intersections = (cube_side + 1) + * (cube_side + 1) + * (cube_side + 1); - long central_stars = (model_space_size_x) - * (model_space_size_y) - * (model_space_size_z) + int central_stars = (cube_side) + * (cube_side) + * (cube_side) * 6; // 6 is to draw the small central star - long centers = (model_space_size_x) - * (model_space_size_y) - * (model_space_size_z) + int centers = (cube_side) + * (cube_side) + * (cube_side) * 2; // and 2 is to draw two centers for each cube // one will be for the arrows sources (blue ?) // and the other, for their targets (red ?) @@ -607,10 +606,10 @@ static void compute_buffers_sizes(int model_space_size_x, buffer_colors_size = buffer_vertex_size; buffer_plans_size = 0; - long grids_lines = - (pref_show_grid % 2 == 0) * (model_space_size_x + 1) * (model_space_size_y + 1) - + (pref_show_grid % 3 == 0) * (model_space_size_x + 1) * (model_space_size_z + 1) - + (pref_show_grid % 5 == 0) * (model_space_size_y + 1) * (model_space_size_z + 1); + int grids_lines = + (pref_show_grid % 2 == 0) * (cube_side + 1) * (cube_side + 1) + + (pref_show_grid % 3 == 0) * (cube_side + 1) * (cube_side + 1) + + (pref_show_grid % 5 == 0) * (cube_side + 1) * (cube_side + 1); if (pref_show_grid != 1) buffer_lines_size = grids_lines * 2; if (pref_show_grid > 0) buffer_lines_size += 12 * 2; // space ridges @@ -622,8 +621,8 @@ static void compute_buffers_sizes(int model_space_size_x, // buffer_lines_size -= 2; // == TEST LINES BUFFER SIZE - if (0) printf("allocated buffers sizes :%4ld/3 = %3ld vertices, %4ld/3 = %3ld colors,\ - %4ld/2 = %3ld lines, %4ld/3 = %3ld plans.\n", + if (0) printf("allocated buffers sizes :%4d/3 = %3d vertices, %4d/3 = %3d colors,\ + %4d/2 = %3d lines, %4d/3 = %3d plans.\n", buffer_vertex_size, buffer_vertex_size / 3, buffer_colors_size, buffer_colors_size / 3, buffer_lines_size, buffer_lines_size / 2, @@ -661,19 +660,14 @@ void graphics_init_buffers(const void *gl_area) get_model_data_and_user_preferences(); /* une struct en retour pour ne plus utiliser de variables globales ? */ - compute_buffers_sizes (model_space_size_x, - model_space_size_y, - model_space_size_z, - pref_test_diagonal); + compute_buffers_sizes (cube_side, pref_test_diagonal); buffer_vertex_origin = g_malloc0(buffer_vertex_size * sizeof(GLfloat) * 2); buffer_colors_origin = g_malloc0(buffer_colors_size * sizeof(GLfloat) * 2); buffer_lines_origin = g_malloc0(buffer_lines_size * 2 * sizeof(GLuint) * 2); buffer_plans_origin = g_malloc0(buffer_plans_size * 3 * sizeof(GLuint) * 2); - compute_space (model_space_size_x, - model_space_size_y, - model_space_size_z, + compute_space (cube_side, arrows, arrows_nb, @@ -686,14 +680,14 @@ void graphics_init_buffers(const void *gl_area) buffer_lines_origin, buffer_plans_origin); - long step_z = 1, - step_y = model_space_size_z + 1, - step_x = (model_space_size_z + 1) * (model_space_size_y + 1); - long s = step_z * model_space_size_z + step_y * model_space_size_y - + step_x * model_space_size_x; + int step_z = 1, + step_y = cube_side + 1, + step_x = (cube_side + 1) * (cube_side + 1); + int s = step_z * cube_side + step_y * cube_side + + step_x * cube_side; draw_some_arrows (buffer_lines_origin, s, - model_space_size_z * model_space_size_y, model_space_size_z, + cube_side * cube_side, cube_side, arrows, arrows_nb); GLuint vao, vertex_buffer, color_buffer; @@ -855,10 +849,10 @@ void graphics_draw(const void *gl_area) /* #define DETAIL 0 */ -/* static bool rewrite_arrow (GLuint *arrows, long address, long weight, */ -/* long site, long x, long y, long z) */ +/* static bool rewrite_arrow (GLuint *arrows, int address, int weight, */ +/* int site, int x, int y, int z) */ /* { */ -/* if (DETAIL) printf("write the arrow weight to %ld at (%ld, %ld, %ld, %ld)\n",\ */ +/* if (DETAIL) printf("write the arrow weight to %d at (%d, %d, %d, %d)\n",\ */ /* weight, site, x, y, z); */ /* *(arrows + address + 0) = weight; */ @@ -866,9 +860,9 @@ void graphics_draw(const void *gl_area) /* return 1; */ /* replaces the load of the existing arrow by the load 'weight' */ /* } */ -/* static bool create_arrow (GLuint *arrows, long weight, long site, long x, long y, long z) */ +/* static bool create_arrow (GLuint *arrows, int weight, int site, int x, int y, int z) */ /* { */ -/* if (1) printf("create a new arrow with weight = %ld at (%ld, %ld, %ld, %ld)\n",\ */ +/* if (1) printf("create a new arrow with weight = %d at (%d, %d, %d, %d)\n",\ */ /* weight, site, x, y, z); */ /* arrows_nb ++; */ @@ -887,10 +881,10 @@ void graphics_draw(const void *gl_area) /* return 1; */ /* } */ -/* static bool erase_arrow (GLuint *arrows, long address, */ -/* long site, long x, long y, long z) */ +/* static bool erase_arrow (GLuint *arrows, int address, */ +/* int site, int x, int y, int z) */ /* { */ -/* if (DETAIL) printf("erase arrow at address %ld with values (%ld, %ld, %ld, %ld)",\ */ +/* if (DETAIL) printf("erase arrow at address %d with values (%d, %d, %d, %d)",\ */ /* address / 5, site, x, y, z); */ /* if (DETAIL) printf(" last arrow is %d, %d, %d, %d, %d\n", */ /* *(arrows + (arrows_nb - 1) * 5 + 0), */ @@ -912,12 +906,12 @@ void graphics_draw(const void *gl_area) /* return 1; */ /* } */ -/* static long check_for_arrow (GLuint *arrows, long site, long x, long y, long z) */ +/* static int check_for_arrow (GLuint *arrows, int site, int x, int y, int z) */ /* { */ /* if (arrows_nb <= 1) return -1; */ -/* printf("check_for_arrow (723) arrows_nb = %ld\n", arrows_nb); */ +/* printf("check_for_arrow (723) arrows_nb = %d\n", arrows_nb); */ -/* long address = -1, f_weight = -1, f_site = -1, f_x = -1, f_y = -1, f_z = -1; */ +/* int address = -1, f_weight = -1, f_site = -1, f_x = -1, f_y = -1, f_z = -1; */ /* for (int i = 0; i < arrows_nb; i++) */ /* { */ /* f_weight = *(arrows + i * 5 + 0); */ @@ -928,33 +922,32 @@ void graphics_draw(const void *gl_area) /* if (f_site == site && f_x == x && f_y == y && f_z == z) { */ /* address = i * 5; */ -/* if (DETAIL) printf("arrows_nb = %ld checked arrow (%ld,%ld,%ld,%ld) found at address %ld (line %ld)",\ */ +/* if (DETAIL) printf("arrows_nb = %d checked arrow (%d,%d,%d,%d) found at address %d (line %d)",\ */ /* arrows_nb, site, x, y, z, address, address / 5); */ -/* if (DETAIL && f_weight > 1) printf(" weight = %ld", f_weight); */ +/* if (DETAIL && f_weight > 1) printf(" weight = %d", f_weight); */ /* if (DETAIL) printf("\n"); */ /* } */ /* } */ -/* return address; returns the address of the arrow if there is one -/* or (-1) if there is none */ +/* return address; returns the address of the arrow if there is one or (-1) if there is none */ /* } */ -/* static void show_arrows_array (GLuint *arrows, long address, long weight, long site, long x, long y, long z) */ +/* static void show_arrows_array (GLuint *arrows, int address, int weight, int site, int x, int y, int z) */ /* { */ -/* printf("\n[ n] load | site x y z ----- < arrows_nb = %ld > ------", arrows_nb); */ +/* printf("\n[ n] load | site x y z ----- < arrows_nb = %d > ------", arrows_nb); */ /* if (arrows_nb == 0) printf("--------------------------- no arrows\n"); */ /* else if (address == -1) printf("--------------------------- create new arrow\n"); */ -/* else printf("--------------------------- erase arrow at address = %ld / 5\n", address); */ +/* else printf("--------------------------- erase arrow at address = %d / 5\n", address); */ /* for (int i = 0; i < arrows_nb; i++) */ /* { */ /* printf("[%2d] = %2d | %2d, %2d, %2d, %2d ",\ */ /* i, *(arrows + i * 5 + 0), *(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\ */ /* *(arrows + i * 5 + 3), *(arrows + i * 5 + 4)); */ -/* if (weight == 0 && i == address / 5) printf(" <<<| < - > (%d, %d, %d, %d) @ [%ld]",\ */ +/* if (weight == 0 && i == address / 5) printf(" <<<| < - > (%d, %d, %d, %d) @ [%d]",\ */ /* *(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\ */ /* *(arrows + i * 5 + 3), *(arrows + i * 5 + 4), address / 5); */ -/* if (weight > 0 && i == arrows_nb - 1) printf(" <<< < + > (%d, %d, %d, %d) @ [%ld]",\ */ +/* if (weight > 0 && i == arrows_nb - 1) printf(" <<< < + > (%d, %d, %d, %d) @ [%d]",\ */ /* *(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\ */ /* *(arrows + i * 5 + 3), *(arrows + i * 5 + 4), address / 5); */ /* if (weight == 0 && i > address / 5 && i < arrows_nb - 1) printf(" |"); */ @@ -964,9 +957,9 @@ void graphics_draw(const void *gl_area) /* } */ -/* static bool set_arrow (GLuint *arrows, long weight, long site, long x, long y, long z) */ +/* static bool set_arrow (GLuint *arrows, int weight, int site, int x, int y, int z) */ /* { */ -/* long address = (check_for_arrow (arrows, site, x, y, z)); */ +/* int address = (check_for_arrow (arrows, site, x, y, z)); */ /* show_arrows_array(arrows, address, weight, site, x, y, z); */ /* if (address == -1 && weight == 0) return 0; */