#include #include #include GLUnurbsObj *theNurb; GLfloat ctlarray[3][2][4] = {0.5, 0.0, -0.5, 1.0, 0.5, 0.0,0.5, 1.0, 0.0, 0.866*0.55, -0.5*0.55, 1.0*0.55, 0.0, 0.866*0.55, 0.5*0.55, 1.0*0.55, -0.5, 0.0, -0.5, 1.0, -0.5, 0.0, 0.5, 1.0}; GLfloat texpts[2][2][2] = {0, 0,0, 1, 1, 0, 1, 1}; 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.3, 0, 0.3, 1); theNurb = gluNewNurbsRenderer(); theqw = gluNewQuadric(); glEnable( GL_DEPTH_TEST); gluNurbsProperty (theNurb, GLU_SAMPLING_TOLERANCE, 25.0); 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, 256, 256, 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.0, 0.0, 1.0, 1.0, 1.0}; GLfloat knot1[] = {0.0, 0.0, 1.0, 1.0}; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glRotatef(1, 1.0, -1.0, 1.0); glColor3f(1, 0, 0); //glEnable(GL_TEXTURE_GEN_S); //glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); //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); glutSolidTeapot(0.3); 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 main() { file_read("C:/Users/11/Desktop/Sparkle_Hot_Pink_Fuchsia_HairFlairs.bmp"); glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); glutInitWindowSize(480, 480); glutInitWindowPosition(100, 100); glutCreateWindow(" "); init(); glutDisplayFunc(Display); glutMainLoop(); }