Дополнительное задание к 1 л.р. // Есть такой код: int main(int argc, char* argv[ ]) { glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize( 512, 512); glutInitWindowPosition(50, 10 ); glutCreateWindow(“tri”); glClearColor(0,0,1,1.0); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); // light glEnable(GL_LIGHT0); float pos[4] = {0,0,100,1}; float dir[3] = {-1,-1,-1}; GLfloat mat_specular[ ] = {1,1,1,1}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 38 128.0); // продолжение image = auxDIBImageLoad("t1.bmp"); // взять любой бмп glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glPixelZoom(1,1); glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, image->sizeX, image->sizeY, GL_RGB, GL_UNSIGNED_BYTE, image->data); glutReshapeFunc( reshape ); glutDisplayFunc(display); glutKeyboardFunc(Keyboard); glutMainLoop(); return 0; } 39 Необходимо дополнить код возможностью использовать мышь посредством функций: glutMouseFunc(void (*func)(int button, int state, int x, int y)); glutMotionFunc(void (*func)(int x, int y)); Кроме того, надо получить из треугольника квадрат, выправить наложение текстуры и добиться, чтобы этот квадрат вращался по нажатию клавиши мыши вокруг выбранной вершины. 40