Programación General > C/C++

 Superficies Bezier con Opengl

(1/1)

darioup:
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 ---#include <GL/glut.h> int maxY = 537; void init(void){     glClearColor(0.09, 0.36, 0.478, 0.0);     glMatrixMode(GL_PROJECTION);     gluOrtho2D(0.0, 585, 0.0, 537);} void bezier4p(GLfloat mat[][4][3], int tam, int w){     glLineWidth(w);     for(int i=0; i<tam; i++){   glMap1f(GL_MAP1_VERTEX_3, 0.0, 1, 3, 4, &mat[i][0][0]);   glEnable(GL_MAP1_VERTEX_3); //activa el evaluador   glMapGrid1f(250, 0.0, 1.0);   glEvalMesh1(GL_LINE, 0, 250);   glDisable(GL_MAP1_VERTEX_3);     }        }       void CurvadeBezier(void){     glClear(GL_COLOR_BUFFER_BIT);          GLfloat cuerpo[8][4][3] = {   { {267,maxY-78,0} , {297,maxY-146,0} , {297,maxY-146,0} , {216,maxY-248,0} },   { {216,maxY-248,0} , {185,maxY-299,0} , {217,maxY-387,0} , {297, maxY-408,0} },   { {297,maxY-408,0} , {413,maxY-438,0} , {505,maxY-347,0} , {445, maxY-246,0} },   { {445, maxY-246,0} , {370,maxY-158,0} , {370,maxY-158,0} , {400,maxY-89,0} },   { {400,maxY-89,0} , {362,maxY-118,0} , {362,maxY-118,0} , {351,maxY-152,0} },   { {351,maxY-152,0} , {336,maxY-103,0} , {336,maxY-103,0} , {360,maxY-7,0} },   { {360,maxY-7,0} , {300,maxY-40,0} , {300,maxY-40,0} , {320,maxY-156,0} },   { {320,maxY-156,0} , {307,maxY-96,0} , {307,maxY-96,0} , {265,maxY-80,0} }   };       bezier4p(cuerpo, 8, 7);      glFlush();} int main(void){    glutInitWindowSize(600, 600);    glutCreateWindow("Curva de Bezier");    init();    glutDisplayFunc(CurvadeBezier);    glutMainLoop();} 
para rellenar tengo entendido que tengo q utilizar algo como esto
--- Código: C ---void rellena(GLfloat mat[][4][3], int lineas){     for (int i=0; i<lineas; i++){     glMap2f(GL_MAP2_VERTEX_3, 0.0, 1, 3, 4,             0.0, 1, 12, 4, &mat[i][0][0]);   glEnable(GL_MAP2_VERTEX_3); //activa el evaluador   glMapGrid2f(250, 0.0, 1.0, 250, 0.0, 1.0);   glEvalMesh2(GL_FILL, 0, 250, 0, 250);} ...//y mandara a llamar a la funcion rellenar dentro de CurvadeBezier()rellena(cuerpo, 8);} 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

Navegación

[0] Índice de Mensajes

Ir a la versión completa