#include #include /*void Display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0, 1, 0); glBegin(GL_LINES); glVertex2d(0, 0); glVertex2d(0.5, 0.0); glEnd(); glutPostRedisplay(); glutSwapBuffers(); } void main() { glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowSize(480, 480); glutInitWindowPosition(100, 100); glutCreateWindow(" "); glClearColor(0.9, 0.5, 0.75, 1); glutDisplayFunc(Display); glutMainLoop(); }*/ /*void Display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1, 1, 0); glPushMatrix(); glTranslatef(0.3, 0, 0); glutWireCube(0.9); glPopMatrix(); glutPostRedisplay(); glutSwapBuffers(); } void main() { glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowSize(480, 480); glutInitWindowPosition(100, 100); glutCreateWindow(" "); glClearColor(0.9, 0.5, 0.75, 1); gluLookAt(1.0, 1.0, 1.0, 0, 0, 0, 0, 1, 0); glutDisplayFunc(Display); glutMainLoop(); }*/ //Задание1 и 2 GLUnurbsObj* nobj; GLfloat ctlarray[][3] = { { -0.9, -0.8, 0.0 }, { -0.2, 0.8, 0.0 }, { 0.2, -0.5, 0.0 }, { 0.9, 0.8, 0.0 } }; GLfloat ctlarray_2_sovpali[][3] = { { -0.9, -0.8, 0.0 }, { -0.2, 0.8, 0.0 }, { -0.2, 0.8, 0.0 }, { 0.2, -0.5, 0.0 }, { 0.9, 0.8, 0.0 } }; GLfloat ctlarray_3_sovpali[][3] = { { -0.9, -0.8, 0.0 }, { -0.2, 0.8, 0.0 }, { -0.2, 0.8, 0.0 }, { -0.2, 0.8, 0.0 }, { 0.2, -0.5, 0.0 }, { 0.9, 0.8, 0.0 } }; void init(void) { glClearColor(1, 1, 1, 1); nobj = gluNewNurbsRenderer(); gluNurbsProperty(nobj, GLU_SAMPLING_TOLERANCE, 25.0); } void Display() { //открытые GLfloat knot[] = { 0.0, 0.0, 0.0, 1.0, 2.0, 2.0, 2.0 };//k = 3, кривая степени 2, 4 вершины GLfloat knot1[] = { 0.0, 0.0, 1.0, 2.0, 3.0, 3.0 };//k = 2, кривая степени 1, 4 вершины GLfloat knot3[] = { 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0};//k = 4, кривая степени 3, 4 вершины //периодические GLfloat knot_period[] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };//k = 3, кривая степени 2, 4 вершины GLfloat knot1_period[] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 };//k = 2, кривая степени 1, 4 вершины GLfloat knot3_period[] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 };//k = 4, кривая степени 3, 4 вершины //кратные вершины GLfloat knot_2_sovpali[] = { 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 2.0, 2.0, 2.0 };//5 вершин, 2 совпали во 2 вершине GLfloat knot_3_sovpali[] = { 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 3.0, 3.0, 3.0, 3.0 };//6 вершин, 3 совпали во 2 вершине glClear(GL_COLOR_BUFFER_BIT); //Открытые В-сплайн кривые 1,2,3 степени /*glLineWidth(2.0); glColor3f(0.5, 0.1, 0.6); gluNurbsCurve(nobj, 8, knot3, 3, &ctlarray[0][0], 4, GL_MAP1_VERTEX_3);//3 степень glLineWidth(2.0); glColor3f(0, 0.3, 1); gluNurbsCurve(nobj, 7, knot, 3, &ctlarray[0][0], 3, GL_MAP1_VERTEX_3);//2степень glLineWidth(2.0); glColor3f(0.4, 0.8, 1.0); gluNurbsCurve(nobj, 6, knot1, 3, &ctlarray[0][0], 2, GL_MAP1_VERTEX_3);//1 степень //Периодические В-сплайн кривые 1,2,3 степени glLineWidth(5.0); glColor3f(0.5, 0.1, 0.6); gluNurbsCurve(nobj, 8, knot3_period, 3, &ctlarray[0][0], 4, GL_MAP1_VERTEX_3);//3 степень glLineWidth(5.0); glColor3f(0, 0.3, 1); gluNurbsCurve(nobj, 7, knot_period, 3, &ctlarray[0][0], 3, GL_MAP1_VERTEX_3);//2 степень glLineWidth(5.0); glColor3f(0.4, 0.8, 1.0); gluNurbsCurve(nobj, 6, knot1_period, 3, &ctlarray[0][0], 2, GL_MAP1_VERTEX_3);//1 степень */ //кратные вершины glLineWidth(2.0); glColor3f(1.0, 0.0, 0.0); gluNurbsCurve(nobj, 8, knot3, 3, &ctlarray[0][0], 4, GL_MAP1_VERTEX_3);//3 степень, 4 вершины glLineWidth(4.0); glColor3f(0.0, 1.0, 0.0); gluNurbsCurve(nobj, 9, knot_2_sovpali, 3, &ctlarray_2_sovpali[0][0], 4, GL_MAP1_VERTEX_3);//3 степень, 5 вершины glLineWidth(1.0); glColor3f(0.0, 0.0, 1.0); gluNurbsCurve(nobj, 10, knot_3_sovpali, 3, &ctlarray_3_sovpali[0][0], 4, GL_MAP1_VERTEX_3);//3 степень, 5 вершины glPointSize(4.0); glColor3f(1.0, 0.0, 1); glBegin(GL_POINTS); for (int i = 0; i < 4; i++) { glVertex3f(ctlarray[i][0], ctlarray[i][1], ctlarray[i][2]); } glEnd(); glFlush(); } void main() { glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); glutInitWindowSize(480, 480); glutInitWindowPosition(100, 100); glutCreateWindow(" "); init(); glutDisplayFunc(Display); glutMainLoop(); } /*void Display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0, 1, 0); glBegin(GL_POLYGON); glVertex2d(0, 0); glVertex2d(0.5, 0.0); glVertex2d(0.25, 0.25); glVertex2d(0.6, 0.9); glEnd(); glutPostRedisplay(); glutSwapBuffers(); } void main() { glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowSize(480, 480); glutInitWindowPosition(100, 100); glutCreateWindow(" "); glClearColor(0.9, 0.5, 0.75, 1); glutDisplayFunc(Display); glutMainLoop(); } */ /*void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_COLOR_MATERIAL); }*/ /*void Display(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glLoadIdentity(); gluLookAt(3.0, 3.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glScalef(1.0, 1.0, 1.0); glutWireCube(1.0); glFlush(); } void Reshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0, 1.5, 20.0); glMatrixMode(GL_MODELVIEW); } void Display1() { glClear(GL_COLOR_BUFFER_BIT); /*glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30, 1, 3, -20); gluLookAt(3.0, 3.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);*/ /*glPushMatrix(); glTranslatef(0.3f, 0.3f, 0); glColor3f(0, 0.3f, 1); glRotatef(30, 1, 1, 1); glutWireCube(0.2); glPopMatrix(); glPushMatrix(); glTranslatef(-0.3f, 0.3f, 0); glColor3f(0.5f, 0.3f, 1); glRotatef(-30, 1, 1, 1); glutWireCube(0.2); glPopMatrix(); //glutPostRedisplay(); glFlush(); } void Reshape1(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); /*glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); glMatrixMode(GL_MODELVIEW); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(750, 750); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); //init(); glutDisplayFunc(Display1); //glutReshapeFunc(Reshape1); glutMainLoop(); return 0; }*/ //пример создания и включения источника света //GL_AMBIENT - интенсивность рассеянного света //GL_DIFFUSE - интенсивность диффузного света //GL_SPECULAR - интенсивность отраженного света (зеркального) /*GLUquadricObj* theqw; GLfloat lightposition[] = {0, 0, 10, 0}; GLfloat ModelAmbient[] = {1, 1, 1, 1}; GLfloat white_light[] = {1, 0, 0, 1}; void init() { glClearColor(0.0, 0.0, 0.0, 1); theqw = gluNewQuadric(); glEnable(GL_DEPTH_TEST); //glEnable(GL_COLOR_MATERIAL); glLightfv(GL_LIGHT0, GL_AMBIENT, white_light); glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ModelAmbient); glLightfv(GL_LIGHT0, GL_POSITION, lightposition); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //glOrtho(-5, 5, -5, 5, 5, 15); glFrustum(-5,5,-5, 5, 5, 15); glMatrixMode(GL_MODELVIEW); //glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1); //glFrontFace(GL_CW); } void Display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glRotatef(1.0, 1.0, 1.0, 1.0); //glColor3f(1, 0, 0); glPushMatrix(); glTranslated(0, 0, -10); glRotatef(45.0, 1.0, 1.0, 1.0); //glutSolidCube(2); //gluSphere(theqw, 2.5, 50, 50); glutSolidTeapot(2); glPopMatrix(); /*glPushMatrix(); glColor3f(0, 1, 0); glTranslated(2, 0, -10); gluSphere(theqw, 0.5, 50, 50); glPopMatrix();*/ /*glutPostRedisplay(); glutSwapBuffers(); } void main() { glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(750, 750); glutInitWindowPosition(100, 100); glutCreateWindow(" "); init(); glutDisplayFunc(Display); glutMainLoop(); }*/