Hash :
752330a5
Author :
Thomas de Grivel
Date :
2024-08-08T17:20:11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
/* kc3
* Copyright 2022,2023,2024 kmx.io <contact@kmx.io>
*
* Permission is hereby granted to use this software granted the above
* copyright notice and this permission paragraph are included in all
* copies and substantial portions of this software.
*
* THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
* PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
* AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
* THIS SOFTWARE.
*/
#include <math.h>
#include <libkc3/kc3.h>
#include "gl_object.h"
#include "gl_cylinder.h"
void gl_cylinder_clean (s_gl_cylinder *cylinder)
{
assert(cylinder);
gl_object_clean(&cylinder->object);
}
s_gl_cylinder * gl_cylinder_init (s_gl_cylinder *cylinder,
uw segments_u, uw segments_v)
{
f64 angle;
uw i;
uw j;
s_vec3 *p;
f64 z;
assert(cylinder);
assert(segments_u);
assert(segments_v);
cylinder->segments_u = segments_u;
cylinder->segments_v = segments_v;
if (! gl_object_init(&cylinder->object) ||
! gl_object_allocate(&cylinder->object,
segments_u * segments_v + 2,
6 * (segments_u + 1) * (segments_v + 2)))
return NULL;
p = cylinder->object.vertex.data;
i = 0;
while (i < segments_v) {
z = (f64) i / segments_v;
j = 0;
while (j < segments_u) {
angle = (f64) j / segments_u * M_PI * 2.0;
p->x = cos(angle);
p->y = sin(angle);
p->z = z;
p++;
j++;
}
i++;
}
return cylinder;
}
void gl_cylinder_render (const s_gl_cylinder *cylinder)
{
assert(cylinder);
(void) cylinder;
glBegin(GL_POINTS);
glEnd();
}