• Domingo 15 de Diciembre de 2024, 13:52

Autor Tema:  Superficies Bezier con Opengl  (Leído 3768 veces)

darioup

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Superficies Bezier con Opengl
« en: Jueves 18 de Marzo de 2010, 07:47 »
0
Hola a to2, tengo la silueta de una figura pero sin relleno, el objetivo es poder rellenarla con cualqueir color sin sobrepasar los bordes tal como se muestra en el sig codigo
Código: C
  1. #include <GL/glut.h>
  2.  
  3. int maxY = 537;
  4.  
  5. void init(void){
  6.      glClearColor(0.09, 0.36, 0.478, 0.0);
  7.      glMatrixMode(GL_PROJECTION);
  8.      gluOrtho2D(0.0, 585, 0.0, 537);
  9. }
  10.  
  11. void bezier4p(GLfloat mat[][4][3], int tam, int w){
  12.      glLineWidth(w);
  13.      for(int i=0; i<tam; i++){
  14.    glMap1f(GL_MAP1_VERTEX_3, 0.0, 1, 3, 4, &mat[i][0][0]);
  15.    glEnable(GL_MAP1_VERTEX_3); //activa el evaluador
  16.    glMapGrid1f(250, 0.0, 1.0);
  17.    glEvalMesh1(GL_LINE, 0, 250);
  18.    glDisable(GL_MAP1_VERTEX_3);
  19.      }  
  20.      }  
  21.      
  22. void CurvadeBezier(void){
  23.      glClear(GL_COLOR_BUFFER_BIT);
  24.      
  25.      GLfloat cuerpo[8][4][3] = {
  26.    { {267,maxY-78,0} , {297,maxY-146,0} , {297,maxY-146,0} , {216,maxY-248,0} },
  27.    { {216,maxY-248,0} , {185,maxY-299,0} , {217,maxY-387,0} , {297, maxY-408,0} },
  28.    { {297,maxY-408,0} , {413,maxY-438,0} , {505,maxY-347,0} , {445, maxY-246,0} },
  29.    { {445, maxY-246,0} , {370,maxY-158,0} , {370,maxY-158,0} , {400,maxY-89,0} },
  30.    { {400,maxY-89,0} , {362,maxY-118,0} , {362,maxY-118,0} , {351,maxY-152,0} },
  31.    { {351,maxY-152,0} , {336,maxY-103,0} , {336,maxY-103,0} , {360,maxY-7,0} },
  32.    { {360,maxY-7,0} , {300,maxY-40,0} , {300,maxY-40,0} , {320,maxY-156,0} },
  33.    { {320,maxY-156,0} , {307,maxY-96,0} , {307,maxY-96,0} , {265,maxY-80,0} }
  34.    };
  35.    
  36.     bezier4p(cuerpo, 8, 7);
  37.      glFlush();
  38. }
  39.  
  40. int main(void){
  41.     glutInitWindowSize(600, 600);
  42.     glutCreateWindow("Curva de Bezier");
  43.     init();
  44.     glutDisplayFunc(CurvadeBezier);
  45.     glutMainLoop();
  46. }
  47.  

para rellenar tengo entendido que tengo q utilizar algo como esto
Código: C
  1. void rellena(GLfloat mat[][4][3], int lineas){
  2.      for (int i=0; i<lineas; i++){
  3.      glMap2f(GL_MAP2_VERTEX_3, 0.0, 1, 3, 4,
  4.              0.0, 1, 12, 4, &mat[i][0][0]);
  5.    glEnable(GL_MAP2_VERTEX_3); //activa el evaluador
  6.    glMapGrid2f(250, 0.0, 1.0, 250, 0.0, 1.0);
  7.    glEvalMesh2(GL_FILL, 0, 250, 0, 250);
  8. }
  9.  
  10. ...
  11. //y mandara a llamar a la funcion rellenar dentro de CurvadeBezier()
  12. rellena(cuerpo, 8);
  13. }
  14.  
de alguna manera lo hace pero lo hace muy extranio creo q hacen fala puntos de control para q se defina bn la superficie sobre la cual se va a colorear pro ya anduve buscando en la red y no encontre mas q lo q tengo hasta el momento, o si alguien conoce sobre superficies de bezier se los agradecere bastante algun manual o algo parecido pero q realmente contenga superficies curveadas bezier y de preferencia para 2D