Avoid bottle-neck while drwing lines, fix surface

This commit is contained in:
PedroEdiaz
2024-12-01 12:19:53 -06:00
parent 8be2052c45
commit 6c322a9759
4 changed files with 45 additions and 38 deletions

View File

@@ -84,17 +84,17 @@ void main_loop(void)
#ifndef DEBUG
load_mdl_matrix(shader_plain, 0, 0);
draw_mesh(m_axis, 1);
draw_mesh(m_axis);
load_mdl_matrix(shader_plain, 1, 1);
draw_mesh(m_axis, 1);
draw_mesh(m_axis);
load_mdl_matrix(shader_plain, 2, 2);
draw_mesh(m_axis, 1);
draw_mesh(m_axis);
#endif
load_mdl_matrix(shader, 0, 3);
draw_mesh(m_surface, 0);
draw_mesh(m_surface);
load_mdl_matrix(shader_plain, 0, 3);
draw_mesh(m_surface, 1);
draw_mesh_lines(m_surface);
}
int main(void)

View File

@@ -57,7 +57,9 @@ void set_projection_mesh( struct projection );
void destroy_mesh(mesh_t p);
void draw_mesh(mesh_t p, char lines);
void draw_mesh(mesh_t p);
void draw_mesh_lines(mesh_t p);
/*
Set background color:

View File

@@ -91,19 +91,19 @@ void destroy_mesh(mesh_t p)
free(p);
}
void draw_mesh(mesh_t p, char lines )
void draw_mesh(mesh_t p)
{
struct obj *obj = p;
glBindVertexArray(obj->vao);
if( lines )
{
int i;
for (i = 0; i < obj->vertex; i += 3)
glDrawArrays(GL_LINE_LOOP, i, 3);
}
else
{
glDrawArrays(GL_TRIANGLES, 0, obj->vertex);
}
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glDrawArrays(GL_TRIANGLES, 0, obj->vertex);
}
void draw_mesh_lines(mesh_t p)
{
struct obj *obj = p;
glBindVertexArray(obj->vao);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glDrawArrays(GL_TRIANGLES, 0, obj->vertex);
}

View File

@@ -20,6 +20,7 @@
#ifdef TEST
#include <assert.h>
#endif
#include <stdio.h>
typedef void (*function_t)(float *, int *, int);
@@ -62,8 +63,13 @@ void riemman(float *d_surface, int *coords, int grid)
void cube(float *d_surface, int *coord, int grid)
{
for (int i = 0; i < parm.m; i++)
d_surface[i] = ((float)coord[i] / grid) - 0.5;
int i;
for (i = 0; i < parm.m; i++)
d_surface[i] = (2*(float)coord[i] / grid) - 1;
if( parm.m == 2 )
d_surface[2]=0;
}
void mobius(float *d_surface, int *coord, int grid)
@@ -103,13 +109,12 @@ float *generate_data_surface(unsigned char *s)
unsigned int i, j, k, o, p, n;
long size, q = 0;
float *d_surface;
int *cara;
parm.f = cube;
parm.m = 6;
parm.n = parm.m;
parm.grid = 1;
parm.f = klein;
parm.m = 2;
parm.n = 4;
parm.grid = 16;
#ifdef TEST
assert(numero_caras(2) == 1);
@@ -117,9 +122,9 @@ float *generate_data_surface(unsigned char *s)
assert(numero_caras(4) == 24);
#endif
cara = malloc(parm.m * sizeof(int));
*s = parm.m;
*s = parm.n;
cara = malloc(parm.m * sizeof(int));
size = parm.grid * parm.grid * 6 * (parm.n) * numero_caras(parm.m);
d_surface = malloc((size + 1) * sizeof(float));
d_surface[0] = size;
@@ -143,33 +148,33 @@ float *generate_data_surface(unsigned char *s)
{
for (j = 0; j < parm.grid; j++)
{
cara[o] = i;
cara[p] = j;
cara[p] = i;
cara[o] = j;
parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n;
cara[o] = i + 1;
// cara[p] = j;
cara[p] = i + 1;
cara[o] = j;
parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n;
// cara[o] = i + 1;
cara[p] = j + 1;
cara[p] = i + 1;
cara[o] = j + 1;
parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n;
cara[o] = i;
cara[p] = j;
cara[p] = i;
cara[o] = j;
parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n;
// cara[o] = i;
cara[p] = j + 1;
cara[p] = i;
cara[o] = j + 1;
parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n;
cara[o] = i + 1;
// cara [p] = j + 1;
cara[p] = i + 1;
cara[o] = j + 1;
parm.f(&d_surface[q + 1], cara, parm.grid);
q += parm.n;
}