les coordonnées de l'UTAH Teapot

les coordonnées de l'UTAH Teapot - Divers - Programmation

Marsh Posté le 24-04-2005 à 20:44:21    

Salut à tous, je voudrais tester mon programme qui calcule et affiche les Bézier Patches, et pour ça j'aimerais obtenir les coordonnées des points de contrôles qui définissent les patches construisant la fameuse théière, celle utilisée par plein de monde, notamment dans la bibliothèque GLUT.
 
Si quelqu'un les as sous le coude, merci de me les donner ^^
 
A +

Reply

Marsh Posté le 24-04-2005 à 20:44:21   

Reply

Marsh Posté le 24-04-2005 à 20:48:33    

Code :
  1. static void
  2. teapot(GLint grid, GLdouble scale, GLenum type)
  3. {
  4.   float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
  5.   long i, j, k, l;
  6.   glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT);
  7.   glEnable(GL_AUTO_NORMAL);
  8.   glEnable(GL_NORMALIZE);
  9.   glEnable(GL_MAP2_VERTEX_3);
  10.   glEnable(GL_MAP2_TEXTURE_COORD_2);
  11.   glPushMatrix();
  12.   glRotatef(270.0, 1.0, 0.0, 0.0);
  13.   glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale);
  14.   glTranslatef(0.0, 0.0, -1.5);
  15.   for (i = 0; i < 10; i++) {
  16.     for (j = 0; j < 4; j++) {
  17.       for (k = 0; k < 4; k++) {
  18.         for (l = 0; l < 3; l++) {
  19.           p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
  20.           q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l];
  21.           if (l == 1)
  22.             q[j][k][l] *= -1.0;
  23.           if (i < 6) {
  24.             r[j][k][l] =
  25.               cpdata[patchdata[i][j * 4 + (3 - k)]][l];
  26.             if (l == 0)
  27.               r[j][k][l] *= -1.0;
  28.             s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
  29.             if (l == 0)
  30.               s[j][k][l] *= -1.0;
  31.             if (l == 1)
  32.               s[j][k][l] *= -1.0;
  33.           }
  34.         }
  35.       }
  36.     }
  37.     glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2,
  38.       &tex[0][0][0]);
  39.     glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
  40.       &p[0][0][0]);
  41.     glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0);
  42.     glEvalMesh2(type, 0, grid, 0, grid);
  43.     glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
  44.       &q[0][0][0]);
  45.     glEvalMesh2(type, 0, grid, 0, grid);
  46.     if (i < 6) {
  47.       glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
  48.         &r[0][0][0]);
  49.       glEvalMesh2(type, 0, grid, 0, grid);
  50.       glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
  51.         &s[0][0][0]);
  52.       glEvalMesh2(type, 0, grid, 0, grid);
  53.     }
  54.   }
  55.   glPopMatrix();
  56.   glPopAttrib();
  57. }


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 24-04-2005 à 20:50:31    

J'en ai oublié un bout [:petrus75]
 

Code :
  1. static int patchdata[][16] =
  2. {
  3.     /* rim */
  4.   {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11,
  5.     12, 13, 14, 15},
  6.     /* body */
  7.   {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
  8.     24, 25, 26, 27},
  9.   {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36,
  10.     37, 38, 39, 40},
  11.     /* lid */
  12.   {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101,
  13.     101, 0, 1, 2, 3,},
  14.   {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112,
  15.     113, 114, 115, 116, 117},
  16.     /* bottom */
  17.   {118, 118, 118, 118, 124, 122, 119, 121, 123, 126,
  18.     125, 120, 40, 39, 38, 37},
  19.     /* handle */
  20.   {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
  21.     53, 54, 55, 56},
  22.   {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
  23.     28, 65, 66, 67},
  24.     /* spout */
  25.   {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  26.     80, 81, 82, 83},
  27.   {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
  28.     92, 93, 94, 95}
  29. };
  30. /* *INDENT-OFF* */
  31. static float cpdata[][3] =
  32. {
  33.     {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0,
  34.     -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125},
  35.     {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375,
  36.     0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375,
  37.     2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84,
  38.     2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875},
  39.     {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75,
  40.     1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35},
  41.     {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2,
  42.     0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12,
  43.     0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225},
  44.     {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225},
  45.     {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0,
  46.     -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5,
  47.     -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3,
  48.     2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0,
  49.     2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0,
  50.     2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8},
  51.     {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3,
  52.     -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3,
  53.     1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2,
  54.     -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0,
  55.     1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0,
  56.     0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66,
  57.     0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1},
  58.     {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7,
  59.     -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0,
  60.     2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375},
  61.     {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475},
  62.     {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4},
  63.     {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0,
  64.     3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8,
  65.     3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4,
  66.     -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0,
  67.     2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4,
  68.     2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3,
  69.     2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4},
  70.     {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425,
  71.     -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425,
  72.     0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075},
  73.     {0.84, -1.5, 0.075}
  74. };
  75. static float tex[2][2][2] =
  76. {
  77.   { {0, 0},
  78.     {1, 0}},
  79.   { {0, 1},
  80.     {1, 1}}
  81. };


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 24-04-2005 à 21:39:52    

merci!
Le code au début c pour calculer les points c ca? :p
 
Je vais juste prendre les patches :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed