OpenGL Криві Безьє

2075 / C++ / Додатково / OpenGL / Криві Безьє

 

#include <iostream>
#include <windows.h>
#include <iostream>
#include <GL/gl.h>
#include <GL/glu.h>
//#include <GL/glaux.h>
#include <GL/glut.h>

GLfloat ctrlpoints[4][3] = {
  { -4.0, -4.0, 0.0 },{ -2.0, 4.0, 0.0 },
  { 2.0, -4.0,  0.0 },{  4.0, 4.0, 0.0 } };
void init(void)
{
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glShadeModel(GL_FLAT);
  glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
  glEnable(GL_MAP1_VERTEX_3);
}

void display(void)
{
  int i;
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3f(1.0, 1.0, 1.0);
  glBegin(GL_LINE_STRIP);
  for (i = 0; i <= 30; i++)
    glEvalCoord1f((GLfloat)i / 30.0);
  glEnd();
  /* The following code displays the control points as dots. */
  glPointSize(5.0);
  glColor3f(1.0, 1.0, 0.0);
  glBegin(GL_POINTS);
  for (i = 0; i < 4; i++)
    glVertex3fv(&ctrlpoints[i][0]);
  glEnd();
  glFlush();
}

void reshape(int w, int h)
{
  glViewport(0, 0, (GLsizei)w, (GLsizei)h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  if (w <= h)
  {
    glOrtho(-5.0, 5.0, -5.0*(GLfloat)h / (GLfloat)w,
    5.0*(GLfloat)h / (GLfloat)w, -5.0, 5.0);
  }
  else
  {
    glOrtho(-5.0*(GLfloat)w / (GLfloat)h,
    5.0*(GLfloat)w / (GLfloat)h, -5.0, 5.0, -5.0, 5.0);
  }
  glMatrixMode(GL_MODELVIEW); 
  glLoadIdentity();
}

void keyboard(unsigned char key, int x, int y)
{
  switch (key) {
    case 27:
      exit(0);
      break;
  }
}

int main(int argc, char** argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(500, 500);
  glutInitWindowPosition(100, 100);
  glutCreateWindow(argv[0]);
  init();
  glutDisplayFunc(display);
  glutReshapeFunc(reshape);
  glutKeyboardFunc(keyboard);
  glutMainLoop();
  return 0;
}