fill_cfax.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "vizual.h"
  2. /* #include "cell_table.h" (in vizual.h) */
  3. /* place vertex data into CUBEFAX structure */
  4. void fill_cfax(Cube_data * Cube, int flag, int index, float
  5. TEMP_VERT[13][3], float TEMP_NORM[13][3])
  6. {
  7. int p; /*loop variable */
  8. int n; /*index into TEMP_VERT array */
  9. int num = 0; /*polygon number index into TEMP_NORM for flat shading */
  10. cube_info *CUBEFAX;
  11. CUBEFAX = Cube->data; /* make old code work w/ new structure */
  12. /* DEBUG
  13. fprintf(stderr,"%d npoly %d flag\n",CUBEFAX[NTHRESH].npoly,flag);
  14. END DEBUG */
  15. CUBEFAX[NTHRESH].npoly = cell_table[index].npolys;
  16. /* this is for gradient shading (3 normals per polygon) */
  17. if (flag > 1) {
  18. for (p = 0, num = 0; num < CUBEFAX[NTHRESH].npoly; num++) {
  19. poly_info *CP;
  20. /* NOTE: normals recorded by edge */
  21. /* avoid a little redundant calculation: dpg */
  22. CP = &(CUBEFAX[NTHRESH].poly[num]);
  23. n = cell_table[index].polys[p];
  24. CP->v1[0] = TEMP_VERT[n][0];
  25. CP->v1[1] = TEMP_VERT[n][1];
  26. CP->v1[2] = TEMP_VERT[n][2];
  27. CP->n1[0] = (TEMP_NORM[n][0] + 1.) * 127;
  28. CP->n1[1] = (TEMP_NORM[n][1] + 1.) * 127;
  29. CP->n1[2] = (TEMP_NORM[n][2] + 1.) * 127;
  30. p++;
  31. n = cell_table[index].polys[p];
  32. CP->v2[0] = TEMP_VERT[n][0];
  33. CP->v2[1] = TEMP_VERT[n][1];
  34. CP->v2[2] = TEMP_VERT[n][2];
  35. CP->n2[0] = (TEMP_NORM[n][0] + 1.) * 127;
  36. CP->n2[1] = (TEMP_NORM[n][1] + 1.) * 127;
  37. CP->n2[2] = (TEMP_NORM[n][2] + 1.) * 127;
  38. p++;
  39. n = cell_table[index].polys[p];
  40. CP->v3[0] = TEMP_VERT[n][0];
  41. CP->v3[1] = TEMP_VERT[n][1];
  42. CP->v3[2] = TEMP_VERT[n][2];
  43. CP->n3[0] = (TEMP_NORM[n][0] + 1.) * 127;
  44. CP->n3[1] = (TEMP_NORM[n][1] + 1.) * 127;
  45. CP->n3[2] = (TEMP_NORM[n][2] + 1.) * 127;
  46. p++;
  47. }
  48. }
  49. else if (flag == 1) { /* this is for flat shading (NOTE: 1 normal per polygon) */
  50. for (p = 0, num = 0; num < CUBEFAX[NTHRESH].npoly; num++) {
  51. poly_info *CP;
  52. /* avoid a little redundant calculation: dpg */
  53. CP = &(CUBEFAX[NTHRESH].poly[num]);
  54. n = cell_table[index].polys[p];
  55. CP->v1[0] = TEMP_VERT[n][0];
  56. CP->v1[1] = TEMP_VERT[n][1];
  57. CP->v1[2] = TEMP_VERT[n][2];
  58. p++;
  59. n = cell_table[index].polys[p];
  60. CP->v2[0] = TEMP_VERT[n][0];
  61. CP->v2[1] = TEMP_VERT[n][1];
  62. CP->v2[2] = TEMP_VERT[n][2];
  63. p++;
  64. n = cell_table[index].polys[p];
  65. CP->v3[0] = TEMP_VERT[n][0];
  66. CP->v3[1] = TEMP_VERT[n][1];
  67. CP->v3[2] = TEMP_VERT[n][2];
  68. p++;
  69. /* NOTE: in calc_fnorm() flat shaded normals recorded by polygon */
  70. /*now assigning the normal for this polygon */
  71. CP->n1[0] = (TEMP_NORM[num][0] + 1.) * 127;
  72. CP->n1[1] = (TEMP_NORM[num][1] + 1.) * 127;
  73. CP->n1[2] = (TEMP_NORM[num][2] + 1.) * 127;
  74. }
  75. }
  76. }