completed triangle display function

This commit is contained in:
Alexandre 2024-12-31 23:23:32 +01:00
parent de5868f24d
commit 6204e6011a
5 changed files with 111 additions and 3 deletions

BIN
bin/back

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -404,7 +404,115 @@ void renderTriangle(
construct_vertex(1500.0 * (1.0 + (px2 / (1.5 * pz2 * tan_fov))) / 2.0, 1000.0 * (1.0 + (py2 / (pz2 * tan_fov))) / 2.0, red, green, blue),
};
SDL_RenderGeometry(renderer, NULL, vtxs, 3, NULL, 0);
} // TODO //
} else if((pz0 >= 0.4) + (pz1 >= 0.4) + (pz2 >= 0.4) == 2) {
double fpx0; double fpy0; double fpz0;
double fpx1; double fpy1; double fpz1;
double mpx0; double mpy0; double mpz0;
double mpx1; double mpy1; double mpz1;
if(pz0 < 0.4) {
// pz1 >= 0.4 and pz2 >+ 0.4
fpx0 = px1 ; fpy0 = py1 ; fpz0 = pz1 ;
fpx1 = px2 ; fpy1 = py2 ; fpz1 = pz2 ;
// 1-0 segment
project_to_camera(
convex_pt(x1, x0, (pz1 - 0.4)/(pz1 - pz0)),
convex_pt(y1, y0, (pz1 - 0.4)/(pz1 - pz0)),
convex_pt(z1, z0, (pz1 - 0.4)/(pz1 - pz0)),
&mpx0, &mpy0, &mpz0) ;
// 0-2 segment
project_to_camera(
convex_pt(x2, x0, (pz2 - 0.4)/(pz2 - pz0)),
convex_pt(y2, y0, (pz2 - 0.4)/(pz2 - pz0)),
convex_pt(z2, z0, (pz2 - 0.4)/(pz2 - pz0)),
&mpx1, &mpy1, &mpz1) ;
} else if(pz1 < 0.4) {
// pz0 >= 0.4 and pz2 >+ 0.4
fpx0 = px0 ; fpy0 = py0 ; fpz0 = pz0 ;
fpx1 = px2 ; fpy1 = py2 ; fpz1 = pz2 ;
// 0-1 segment
project_to_camera(
convex_pt(x0, x1, (pz0 - 0.4)/(pz0 - pz1)),
convex_pt(y0, y1, (pz0 - 0.4)/(pz0 - pz1)),
convex_pt(z0, z1, (pz0 - 0.4)/(pz0 - pz1)),
&mpx0, &mpy0, &mpz0) ;
// 1-2 segment
project_to_camera(
convex_pt(x2, x1, (pz2 - 0.4)/(pz2 - pz1)),
convex_pt(y2, y1, (pz2 - 0.4)/(pz2 - pz1)),
convex_pt(z2, z1, (pz2 - 0.4)/(pz2 - pz1)),
&mpx1, &mpy1, &mpz1) ;
} else if(pz2 < 0.4) {
// pz1 >= 0.4 and pz0 >+ 0.4
fpx0 = px0 ; fpy0 = py0 ; fpz0 = pz0 ;
fpx1 = px1 ; fpy1 = py1 ; fpz1 = pz1 ;
// 0-2 segment
project_to_camera(
convex_pt(x0, x2, (pz0 - 0.4)/(pz0 - pz2)),
convex_pt(y0, y2, (pz0 - 0.4)/(pz0 - pz2)),
convex_pt(z0, z2, (pz0 - 0.4)/(pz0 - pz2)),
&mpx0, &mpy0, &mpz0) ;
// 1-2 segment
project_to_camera(
convex_pt(x1, x2, (pz1 - 0.4)/(pz1 - pz2)),
convex_pt(y1, y2, (pz1 - 0.4)/(pz1 - pz2)),
convex_pt(z1, z2, (pz1 - 0.4)/(pz1 - pz2)),
&mpx1, &mpy1, &mpz1) ;
}
const SDL_Vertex vtxs[6] = {
construct_vertex(1500.0 * (1.0 + (fpx0 / (1.5 * fpz0 * tan_fov))) / 2.0, 1000.0 * (1.0 + (fpy0 / (fpz0 * tan_fov))) / 2.0, red, green, blue),
construct_vertex(1500.0 * (1.0 + (mpx0 / (1.5 * mpz0 * tan_fov))) / 2.0, 1000.0 * (1.0 + (mpy0 / (mpz0 * tan_fov))) / 2.0, red, green, blue),
construct_vertex(1500.0 * (1.0 + (fpx1 / (1.5 * fpz1 * tan_fov))) / 2.0, 1000.0 * (1.0 + (fpy1 / (fpz1 * tan_fov))) / 2.0, red, green, blue),
construct_vertex(1500.0 * (1.0 + (mpx0 / (1.5 * mpz0 * tan_fov))) / 2.0, 1000.0 * (1.0 + (mpy0 / (mpz0 * tan_fov))) / 2.0, red, green, blue),
construct_vertex(1500.0 * (1.0 + (mpx1 / (1.5 * mpz1 * tan_fov))) / 2.0, 1000.0 * (1.0 + (mpy1 / (mpz1 * tan_fov))) / 2.0, red, green, blue),
construct_vertex(1500.0 * (1.0 + (fpx1 / (1.5 * fpz1 * tan_fov))) / 2.0, 1000.0 * (1.0 + (fpy1 / (fpz1 * tan_fov))) / 2.0, red, green, blue),
};
SDL_RenderGeometry(renderer, NULL, vtxs, 6, NULL, 0);
} else if((pz0 >= 0.4) + (pz1 >= 0.4) + (pz2 >= 0.4) == 1) {
if(pz0 >= 0.4) {
project_to_camera(
convex_pt(x0, x1, (pz0 - 0.4)/(pz0 - pz1)),
convex_pt(y0, y1, (pz0 - 0.4)/(pz0 - pz1)),
convex_pt(z0, z1, (pz0 - 0.4)/(pz0 - pz1)),
&px1, &py1, &pz1);
project_to_camera(
convex_pt(x0, x2, (pz0 - 0.4)/(pz0 - pz2)),
convex_pt(y0, y2, (pz0 - 0.4)/(pz0 - pz2)),
convex_pt(z0, z2, (pz0 - 0.4)/(pz0 - pz2)),
&px2, &py2, &pz2);
} else if(pz1 >= 0.4) {
project_to_camera(
convex_pt(x1, x0, (pz1 - 0.4)/(pz1 - pz0)),
convex_pt(y1, y0, (pz1 - 0.4)/(pz1 - pz0)),
convex_pt(z1, z0, (pz1 - 0.4)/(pz1 - pz0)),
&px0, &py0, &pz0);
project_to_camera(
convex_pt(x1, x2, (pz1 - 0.4)/(pz1 - pz2)),
convex_pt(y1, y2, (pz1 - 0.4)/(pz1 - pz2)),
convex_pt(z1, z2, (pz1 - 0.4)/(pz1 - pz2)),
&px2, &py2, &pz2);
} else if(pz2 >= 0.4) {
project_to_camera(
convex_pt(x2, x0, (pz2 - 0.4)/(pz2 - pz0)),
convex_pt(y2, y0, (pz2 - 0.4)/(pz2 - pz0)),
convex_pt(z2, z0, (pz2 - 0.4)/(pz2 - pz0)),
&px0, &py0, &pz0);
project_to_camera(
convex_pt(x2, x1, (pz2 - 0.4)/(pz2 - pz1)),
convex_pt(y2, y1, (pz2 - 0.4)/(pz2 - pz1)),
convex_pt(z2, z1, (pz2 - 0.4)/(pz2 - pz1)),
&px1, &py1, &pz1);
}
const SDL_Vertex vtxs[3] = {
construct_vertex(1500.0 * (1.0 + (px0 / (1.5 * pz0 * tan_fov))) / 2.0, 1000.0 * (1.0 + (py0 / (pz0 * tan_fov))) / 2.0, red, green, blue),
construct_vertex(1500.0 * (1.0 + (px1 / (1.5 * pz1 * tan_fov))) / 2.0, 1000.0 * (1.0 + (py1 / (pz1 * tan_fov))) / 2.0, red, green, blue),
construct_vertex(1500.0 * (1.0 + (px2 / (1.5 * pz2 * tan_fov))) / 2.0, 1000.0 * (1.0 + (py2 / (pz2 * tan_fov))) / 2.0, red, green, blue),
};
SDL_RenderGeometry(renderer, NULL, vtxs, 3, NULL, 0);
}
}
void renderTriangleRotated(

View File

@ -39,9 +39,9 @@ void build_chunk_1(int chx, int chy) {
new->map[5] = create_cube_0(4.0, 1.0, 4.0, 1.0, 5.0, 1.0, 0.0, 0.0, 255, 255, 128);
new->tps[0] = create_teleporter(-1.0, 1.0, 2.0, 1.0, 2.0 + (double)(rand()%2), 1.0, 3.14159/4.0, 0.0, 255, 0, 0 , chx-1, chy , 2.5, 2.5, 2.5);
new->tps[1] = create_teleporter(2.0, 1.0, -1.0, 1.0, 2.0 + (double)(rand()%2), 1.0, 3.14159/4.0, 0.0, 255, 255, 0, chx , chy+1, 2.5, 2.5, 2.5);
new->tps[1] = create_teleporter(2.0, 1.0, -1.0, 1.0, 2.0 + (double)(rand()%2), 1.0, 3.14159/4.0, 0.0, 255, 255, 0, chx , chy-1, 2.5, 2.5, 2.5);
new->tps[2] = create_teleporter(5.0, 1.0, 2.0, 1.0, 2.0 + (double)(rand()%2), 1.0, 3.14159/4.0, 0.0, 0, 255, 0 , chx+1, chy , 2.5, 2.5, 2.5);
new->tps[3] = create_teleporter(2.0, 1.0, 5.0, 1.0, 2.0 + (double)(rand()%2), 1.0, 3.14159/4.0, 0.0, 0, 0, 255 , chx , chy-1, 2.5, 2.5, 2.5);
new->tps[3] = create_teleporter(2.0, 1.0, 5.0, 1.0, 2.0 + (double)(rand()%2), 1.0, 3.14159/4.0, 0.0, 0, 0, 255 , chx , chy+1, 2.5, 2.5, 2.5);
//printf("linked (%d, %d) to :\n", chx, chy);
//printf(" {%d, %d}; {%d, %d}; {%d, %d}; {%d, %d}\n", chx-1, chy, chx, chy+1, chx+1, chy, chx, chy-1);