Assert Style
This commit is contained in:
23
src/main.c
23
src/main.c
@@ -48,7 +48,8 @@ extern volatile unsigned char animate_index;
|
|||||||
static inline
|
static inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void main_loop(void)
|
void
|
||||||
|
main_loop(void)
|
||||||
{
|
{
|
||||||
quat_t q;
|
quat_t q;
|
||||||
|
|
||||||
@@ -60,24 +61,24 @@ void main_loop(void)
|
|||||||
{
|
{
|
||||||
static float angle = 0;
|
static float angle = 0;
|
||||||
|
|
||||||
if( angle > M_PI/2 )
|
if (angle > M_PI / 2)
|
||||||
{
|
{
|
||||||
animate_index = 0;
|
animate_index = 0;
|
||||||
angle = 0;
|
angle = 0;
|
||||||
|
|
||||||
load_float_to_shader( shader, "angle", angle);
|
load_float_to_shader(shader, "angle", angle);
|
||||||
load_float_to_shader( shader_plain, "angle", angle);
|
load_float_to_shader(shader_plain, "angle", angle);
|
||||||
set_projection_mesh( projection );
|
set_projection_mesh(projection);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( animate_index )
|
if (animate_index)
|
||||||
{
|
{
|
||||||
load_uint_to_shader( shader, "i", animate_index-1 );
|
load_uint_to_shader(shader, "i", animate_index - 1);
|
||||||
load_uint_to_shader( shader_plain, "i", animate_index-1 );
|
load_uint_to_shader(shader_plain, "i", animate_index - 1);
|
||||||
|
|
||||||
angle+=0.01;
|
angle += 0.01;
|
||||||
load_float_to_shader( shader, "angle", angle);
|
load_float_to_shader(shader, "angle", angle);
|
||||||
load_float_to_shader( shader_plain, "angle", angle);
|
load_float_to_shader(shader_plain, "angle", angle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clean_context();
|
clean_context();
|
||||||
|
|||||||
166
src/surface.c
166
src/surface.c
@@ -66,10 +66,10 @@ void cube(float *d_surface, int *coord, int grid)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < parm.m; i++)
|
for (i = 0; i < parm.m; i++)
|
||||||
d_surface[i] = (2*(float)coord[i] / grid) - 1;
|
d_surface[i] = (2 * (float)coord[i] / grid) - 1;
|
||||||
|
|
||||||
if( parm.m == 2 )
|
if (parm.m == 2)
|
||||||
d_surface[2]=0;
|
d_surface[2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mobius(float *d_surface, int *coord, int grid)
|
void mobius(float *d_surface, int *coord, int grid)
|
||||||
@@ -189,106 +189,114 @@ float *generate_data_surface(unsigned char *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void __calculate_normal(
|
static void __calculate_normal(
|
||||||
float *p1, float *p2, float *p3, float *normal, unsigned char n)
|
float *p1, float *p2, float *p3, float *normal, unsigned char n)
|
||||||
{
|
{
|
||||||
unsigned char i;
|
unsigned char i;
|
||||||
float alpha;
|
float alpha;
|
||||||
float *v1, *v2, *v3;
|
float *v1, *v2, *v3;
|
||||||
float *u1, *u2, *u3;
|
float *u1, *u2, *u3;
|
||||||
|
|
||||||
v1 = malloc(n * sizeof(float));
|
v1 = malloc(n * sizeof(float));
|
||||||
v2 = malloc(n * sizeof(float));
|
v2 = malloc(n * sizeof(float));
|
||||||
v3 = malloc(n * sizeof(float));
|
v3 = malloc(n * sizeof(float));
|
||||||
u1 = malloc(n * sizeof(float));
|
u1 = malloc(n * sizeof(float));
|
||||||
u2 = malloc(n * sizeof(float));
|
u2 = malloc(n * sizeof(float));
|
||||||
u3 = malloc(n * sizeof(float));
|
u3 = malloc(n * sizeof(float));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Calculate a normal vector of a plain using Gram-Schmidt process
|
Calculate a normal vector of a plain using Gram-Schmidt process
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i)
|
||||||
v1[i] = p2[i] - p1[i];
|
{
|
||||||
v2[i] = p3[i] - p1[i];
|
v1[i] = p2[i] - p1[i];
|
||||||
v3[i] = p1[i];
|
v2[i] = p3[i] - p1[i];
|
||||||
}
|
v3[i] = p1[i];
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i)
|
||||||
u1[i] = v1[i];
|
{
|
||||||
}
|
u1[i] = v1[i];
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
float proj[n];
|
float proj[n];
|
||||||
float dot_v2_u1 = 0.0f, dot_u1_u1 = 0.0f;
|
float dot_v2_u1 = 0.0f, dot_u1_u1 = 0.0f;
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i)
|
||||||
dot_v2_u1 += v2[i] * u1[i];
|
{
|
||||||
dot_u1_u1 += u1[i] * u1[i];
|
dot_v2_u1 += v2[i] * u1[i];
|
||||||
}
|
dot_u1_u1 += u1[i] * u1[i];
|
||||||
alpha = dot_v2_u1 / dot_u1_u1;
|
}
|
||||||
|
alpha = dot_v2_u1 / dot_u1_u1;
|
||||||
|
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i)
|
||||||
proj[i] = u1[i] * alpha;
|
{
|
||||||
u2[i] = v2[i] - proj[i];
|
proj[i] = u1[i] * alpha;
|
||||||
}
|
u2[i] = v2[i] - proj[i];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
float proj1[n], proj2[n];
|
float proj1[n], proj2[n];
|
||||||
float dot_v3_u1 = 0.0f, dot_u1_u1 = 0.0f;
|
float dot_v3_u1 = 0.0f, dot_u1_u1 = 0.0f;
|
||||||
float dot_v3_u2 = 0.0f, dot_u2_u2 = 0.0f;
|
float dot_v3_u2 = 0.0f, dot_u2_u2 = 0.0f;
|
||||||
|
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i)
|
||||||
dot_v3_u1 += v3[i] * u1[i];
|
{
|
||||||
dot_u1_u1 += u1[i] * u1[i];
|
dot_v3_u1 += v3[i] * u1[i];
|
||||||
}
|
dot_u1_u1 += u1[i] * u1[i];
|
||||||
for (i = 0; i < n; ++i) {
|
}
|
||||||
proj1[i] = u1[i] * (dot_v3_u1 / dot_u1_u1);
|
for (i = 0; i < n; ++i)
|
||||||
}
|
{
|
||||||
|
proj1[i] = u1[i] * (dot_v3_u1 / dot_u1_u1);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i)
|
||||||
dot_v3_u2 += v3[i] * u2[i];
|
{
|
||||||
dot_u2_u2 += u2[i] * u2[i];
|
dot_v3_u2 += v3[i] * u2[i];
|
||||||
}
|
dot_u2_u2 += u2[i] * u2[i];
|
||||||
for (i = 0; i < n; ++i) {
|
}
|
||||||
proj2[i] = u2[i] * (dot_v3_u2 / dot_u2_u2);
|
for (i = 0; i < n; ++i)
|
||||||
u3[i] = v3[i] - proj1[i] - proj2[i];
|
{
|
||||||
}
|
proj2[i] = u2[i] * (dot_v3_u2 / dot_u2_u2);
|
||||||
}
|
u3[i] = v3[i] - proj1[i] - proj2[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
float magnitude = 0.0f;
|
float magnitude = 0.0f;
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i)
|
||||||
magnitude += u3[i] * u3[i];
|
{
|
||||||
}
|
magnitude += u3[i] * u3[i];
|
||||||
magnitude = sqrtf(magnitude);
|
}
|
||||||
|
magnitude = sqrtf(magnitude);
|
||||||
|
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i)
|
||||||
normal[i] = u3[i] / magnitude;
|
{
|
||||||
}
|
normal[i] = u3[i] / magnitude;
|
||||||
|
}
|
||||||
|
|
||||||
free(v1);
|
free(v1);
|
||||||
free(v2);
|
free(v2);
|
||||||
free(v3);
|
free(v3);
|
||||||
free(u1);
|
free(u1);
|
||||||
free(u2);
|
free(u2);
|
||||||
free(u3);
|
free(u3);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float *generate_normals_surface(float *d, unsigned char m)
|
float *generate_normals_surface(float *d, unsigned char m)
|
||||||
{
|
{
|
||||||
float *n;
|
float *n;
|
||||||
n = malloc((*d + 1) * sizeof(float));
|
n = malloc((*d + 1) * sizeof(float));
|
||||||
*n = *d;
|
*n = *d;
|
||||||
|
|
||||||
float * norm_vec;
|
float *norm_vec;
|
||||||
norm_vec=malloc(m*sizeof(float));
|
norm_vec = malloc(m * sizeof(float));
|
||||||
|
|
||||||
for (int i = 0; i < *d; i += 3 * m)
|
for (int i = 0; i < *d; i += 3 * m)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
__calculate_normal(
|
__calculate_normal(
|
||||||
(d + 1) + i, (d + 1) + i + m, (d + 1) + i + 2 * m, norm_vec, m);
|
(d + 1) + i, (d + 1) + i + m, (d + 1) + i + 2 * m, norm_vec, m);
|
||||||
glm_vec3_copy(norm_vec, (n + 1) + i);
|
glm_vec3_copy(norm_vec, (n + 1) + i);
|
||||||
|
|||||||
Reference in New Issue
Block a user