Advertisement
ionut258

bezier

Mar 25th, 2019
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. /*  curbe_Bezier.c
  3.  *  
  4.  Programul utilizeaza evaluatorii pentru determinarea
  5.  punctelor de pe curba Bezier
  6.  */
  7. #include "glos.h"
  8.  
  9. #include <GL/gl.h>
  10. #include <glu.h>
  11. #include <glaux.h>
  12.  
  13. void myinit(void);
  14. void CALLBACK myReshape(GLsizei w, GLsizei h);
  15. void CALLBACK display(void);
  16. #define nr_puncte 4
  17.  
  18. GLfloat ctrlpoints[nr_puncte][3] = {           
  19.     //sunt date coordonatele celor 4 puncte de control
  20.     { -4.0, 0.0, 0.0}, { -3.0, 2.0, 0.0},
  21.     {-1.0, 2.0, 0.0}, {0.0,0.0,0}  };
  22.  
  23. GLfloat ctrlpoints2[nr_puncte][3] = {          
  24.     //sunt date coordonatele celor 4 puncte de control
  25.     { 0.0, 0.0, 0.0}, { 1.0, -2.0, 0.0},
  26.     {3.0, -2.0, 0.0}, {4.0,0.0,0}  };
  27.  
  28.  
  29.  
  30. void myinit(void)
  31. {
  32.     glClearColor(1.0, 1.0, 1.0, 1.0); //culoarea background-ului
  33.    
  34. /*functia defineste caracteristicile curbei:
  35. -tipul punctelor de control date in vectorul ctrlpoints, si al
  36. datelor de iesire generate de functia de evaluare glEvalCoord1f
  37. -valorile extreme luate de parametrul u (0 si 1 in acst caz)
  38. -numarul coordonatelor date pentru fiecare punct de control, in tabloul
  39. ctrlpoints
  40. -numarul punctelor de control pe baza carora se va determina ordinul curbei
  41. (numar puncte-1)
  42. -vectorul punctelor de control
  43.    */
  44.    
  45.     glEnable(GL_MAP1_VERTEX_3); //se valideaza un anumit tip de evaluare
  46.     glShadeModel(GL_FLAT);  //umbrire constanta pe poligoane
  47.     glLineStipple (1, 0x0F0F);
  48. }
  49.  
  50. void CALLBACK display(void)
  51. {
  52.     int i;
  53.  
  54.     glClear(GL_COLOR_BUFFER_BIT);
  55.     glColor3f(0.0, 0.0, 0.0);
  56. glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);   //culoarea curenta de desenare
  57.     glBegin(GL_LINE_STRIP);     //se deseneaza curba prin segmente de dreapta
  58.     for (i = 0; i <= 30; i++)
  59.         glEvalCoord1f((GLfloat) i/30.0); //pentru cele 30 varfuri determinate de
  60.                                 // functia glEvalCoord1f
  61.     glEnd();
  62.  
  63.     glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints2[0][0]);  //culoarea curenta de desenare
  64.     glBegin(GL_LINE_STRIP);     //se deseneaza curba prin segmente de dreapta
  65.     for (i = 0; i <= 30; i++)
  66.         glEvalCoord1f((GLfloat) i/30.0); //pentru cele 30 varfuri determinate de
  67.                                 // functia glEvalCoord1f
  68.     glEnd();
  69.    
  70.     /* Se afiseaza punctele de control. */
  71.     glPointSize(5.0);   // de dimensiune 5
  72.     glColor3f(1.0, 0.0, 0.0);   // culoare rosie
  73.     glBegin(GL_POINTS);
  74.     for (i = 0; i < nr_puncte; i++)
  75.         glVertex3fv(&ctrlpoints[i][0]);
  76.     glEnd();
  77.  
  78.        
  79.    
  80.     //poligonul caracteristic ?
  81.  
  82.  
  83.     glEnable(GL_LINE_STIPPLE);
  84.     glColor3f(1.0, 0.0, 1.0);
  85.     glBegin (GL_LINE_STRIP);
  86.     for (i=0; i<nr_puncte; i++)
  87.         glVertex3fv(&ctrlpoints2[i][0]);
  88.     glEnd();
  89.      glPointSize(5.0);  // de dimensiune 5
  90.     glColor3f(1.0, 0.0, 0.0);   // culoare rosie
  91.     glBegin(GL_POINTS);
  92.     for (i = 0; i < nr_puncte; i++)
  93.         glVertex3fv(&ctrlpoints2[i][0]);
  94.     glEnd();
  95.  
  96.        
  97.    
  98.     //poligonul caracteristic ?
  99.     glEnable(GL_LINE_STIPPLE);
  100.     glColor3f(1.0, 0.0, 1.0);
  101.     glBegin (GL_LINE_STRIP);
  102.     for (i=0; i<nr_puncte; i++)
  103.         glVertex3fv(&ctrlpoints2[i][0]);
  104.     glEnd();
  105.  
  106.     glFlush();
  107. }
  108.  
  109. void CALLBACK myReshape(GLsizei w, GLsizei h)
  110. {
  111.     if (!h) return;
  112.     glViewport(0, 0, w, h);
  113.     glMatrixMode(GL_PROJECTION);
  114.     glLoadIdentity();
  115.     if (w <= h)
  116.     glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w,
  117.         5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0);
  118.     else
  119.     glOrtho(-5.0*(GLfloat)w/(GLfloat)h,
  120.         5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0);
  121.     glMatrixMode(GL_MODELVIEW);
  122.     glLoadIdentity();
  123. }
  124.  
  125. int main(int argc, char** argv)
  126. {
  127.     auxInitDisplayMode (AUX_SINGLE | AUX_RGB);
  128.     auxInitPosition (0, 0, 500, 500);
  129.     auxInitWindow ("Curbe Bezier");
  130.     myinit();
  131.     auxReshapeFunc (myReshape);
  132.     auxMainLoop(display);
  133.     return(0);
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement