#include #include #include double k = 0.1; GLfloat ctlarray[3][2][4] = { 0.5,0.0,-0.3,1.0, 0.5,0.0,0.3,1.0, 0.0,0.866*0.55,-0.3*0.55,1.0*0.55, 0.0,0.866*0.55,0.3*0.55,1.0*0.55, -0.5,0.0,-0.3,1.0, -0.5,0.0,0.3,1.0 }; GLfloat texP[] = {1.0, 0.0, 0.0, 0.0}; GLfloat texP1[] = {0, 1, 0.0, 0.0}; GLfloat textP2[] = {0, 0, 1, 0}; GLubyte TexI[] = {255,0,0,255,0,0,255,255,0,255,255,0,0,255,0,0,255,0,0,0,255,0,0,255}; GLfloat texpts[2][2][2] = {0, 0, 0, 1,4,0,10,8}; GLUnurbsObj* theNurb; GLUquadricObj* theqw; GLubyte *Iz_RGB; void file_read(const char* filename) { BITMAPFILEHEADER FileHeader; BITMAPINFOHEADER InfoHeader; FILE* MyFile = fopen(filename, "rb"); fread(&FileHeader, sizeof(FileHeader), 1, MyFile); fread(&InfoHeader, sizeof(InfoHeader), 1, MyFile); fseek(MyFile, FileHeader.bfOffBits, SEEK_SET); int w = InfoHeader.biWidth; int h = InfoHeader.biHeight; Iz_RGB = (GLubyte*)malloc(w * h * 3); fread(Iz_RGB, w * h * 3, 1, MyFile); fclose(MyFile); for (int ii = 0; ii < w * h * 3; ii+=3) { GLubyte m1 = Iz_RGB[ii]; Iz_RGB[ii] = Iz_RGB[ii + 2]; Iz_RGB[ii + 2] = m1; } } void init() { glClearColor(0.1, 0.98, 0.3, 1); theNurb = gluNewNurbsRenderer(); theqw = gluNewQuadric(); glEnable(GL_DEPTH_TEST); gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, Iz_RGB); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); gluQuadricTexture(theqw, true); glEnable(GL_TEXTURE_2D); free(Iz_RGB); } void Display() { GLfloat knot[] = {0,0,0,1,1,1}; GLfloat knot1[] = {0,0,1,1}; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glRotatef(1,1,-1,1); glColor3f(1,0,0); //glEnable(GL_TEXTURE_GEN_S); //glTexGenfv(GL_S, GL_OBJECT_PLANE, texP1); glMap2f(GL_MAP2_TEXTURE_COORD_2, 0,1,2,2,0,1,4,2,&texpts[0][0][0]); glEnable(GL_MAP2_TEXTURE_COORD_2); //gluSphere(theqw, 0.3, 50, 750); //glutSolidTeapot(k); gluBeginSurface(theNurb); gluNurbsSurface(theNurb, 6, knot, 4, knot1, 2 * 4, 4, &ctlarray[0][0][0], 3, 2, GL_MAP2_VERTEX_4); gluEndSurface(theNurb); glutPostRedisplay(); glutSwapBuffers(); } void handler(unsigned char c, int x, int y) { switch (c) { case '+': k += 0.01; break; case '-': k -= 0.01; break; } } void main() { file_read("1.bmp"); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(900, 800); glutInitWindowPosition(100, 100); glutCreateWindow("20 минут писанины"); init(); glutDisplayFunc(Display); glutKeyboardFunc(handler); glutMainLoop(); }