Toro agregado

This commit is contained in:
alan
2024-10-18 09:30:11 -06:00
parent af2c2afa1d
commit 994bd3987c
4 changed files with 72 additions and 65 deletions

View File

@@ -1,7 +1,7 @@
BIN = manigraph
OBJ = \
src/banda_mob.o \
src/surface.o \
src/context.o \
src/texture.o \
src/window.o \

View File

@@ -1,59 +0,0 @@
#include <stdio.h>
#include "main.h"
#include <math.h>
#include <stdlib.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#define GRID_SIZE 16
#define WIDTH 0.5
typedef void(*function_t)(float*,int,int);
void mobius(float *p, int i, int j)
{
float u = (2*M_PI) * ((float)i/(GRID_SIZE) );
float v = (2*WIDTH) * ((float)j/(GRID_SIZE) ) - WIDTH;
p[0] = cos(u) + v * cos(u / 2) * cos(u);
p[1] = sin(u) + v * cos(u / 2) * sin(u);
p[2] = v * sin(u / 2);
}
float * acabron(){
long size = GRID_SIZE*GRID_SIZE*2*3*3;
function_t f = mobius;
float * d_cube;
int k=0;
d_cube = malloc((size+1)*sizeof(float));
d_cube[0] = size;
for (int i = 0; i < GRID_SIZE; i++)
{
for (int j = 0; j < GRID_SIZE; j++)
{
// Triángulo 1
f(&d_cube[k + 1], i, j);
k+=3;
f(&d_cube[k + 1], i + 1, j);
k+=3;
f(&d_cube[k + 1], i + 1, j + 1);
k+=3;
// Triángulo 2
f(&d_cube[k + 1], i, j);
k+=3;
f(&d_cube[k + 1], i, j + 1);
k+=3;
f(&d_cube[k + 1], i + 1, j + 1);
k+=3;
}
}
return d_cube;
}

View File

@@ -18,11 +18,11 @@ unsigned char palette[] =
};
const char * wname = "manigraph: manifold grapher";
float * acabron(void);
float * gen_surface();
int main( void )
{
float * d_cube;
float * points;
id_t shader, texture;
mesh_t m_cube, m_axis;
window_t window;
@@ -35,7 +35,7 @@ int main( void )
glewInit();
d_cube = acabron();
points = gen_surface(256);
if( !( shader = create_shader() ) )
goto error_shader;
@@ -46,10 +46,10 @@ int main( void )
load_fix_matrix( shader, (float)WIDTH/HEIGHT );
if( !( m_cube = create_mesh( d_cube ) ) )
if( !( m_cube = create_mesh( points ) ) )
goto error_mesh_cube;
free(d_cube);
free(points);
if( !( m_axis = create_mesh( d_axis ) ) )
goto error_mesh_axis;

66
src/surface.c Normal file
View File

@@ -0,0 +1,66 @@
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#define WIDTH 0.5
typedef void(*function_t)(float*,int, int, int);
void mobius(float *p, int i, int j, int GRID_SIZE)
{
float u = (2*M_PI) * ((float)i/(GRID_SIZE) );
float v = (2*WIDTH) * ((float)j/(GRID_SIZE) ) - WIDTH;
p[0] = cos(u) + v * cos(u / 2) * cos(u);
p[1] = sin(u) + v * cos(u / 2) * sin(u);
p[2] = v * sin(u / 2);
}
void toro(float *p, int i, int j, int GRID_SIZE)
{
float u = (2*M_PI) * ((float)i/(GRID_SIZE) );
float v = (2*WIDTH) * ((float)j );
p[0] = (1 + 0.5*cos(v))*cos(u);
p[1] = (1 + 0.5*cos(v)) * sin(u);
p[2] = 0.5*sin(v);
}
float * gen_surface(int GRID_SIZE)
{
long size = GRID_SIZE*GRID_SIZE*2*3*3;
function_t f = mobius;
float * points;
int k=0;
points = malloc((size+1)*sizeof(float));
points[0] = size;
for (int i = 0; i < GRID_SIZE; i++)
{
for (int j = 0; j < GRID_SIZE; j++)
{
// Triángulo 1
f(&points[k + 1], i, j, GRID_SIZE);
k+=3;
f(&points[k + 1], i + 1, j, GRID_SIZE);
k+=3;
f(&points[k + 1], i + 1, j + 1, GRID_SIZE);
k+=3;
// Triángulo 2
f(&points[k + 1], i, j, GRID_SIZE);
k+=3;
f(&points[k + 1], i, j + 1, GRID_SIZE);
k+=3;
f(&points[k + 1], i + 1, j + 1, GRID_SIZE);
k+=3;
}
}
return points;
}