Advertisement
Guest User

лаба 3, первый лист

a guest
Oct 19th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <gl/glut.h>
  4.  
  5.  
  6. GLfloat ctlarrayfirst[3][2][4] =
  7. { 0.5,0.0,-0.3,1.0,0.5,0.0,
  8. 0.3,1.0,0.0,0.866*0.55,-0.3*0.55, 0.55,
  9. 0.0,0.866*0.55,0.3*0.55, 0.55, -0.5,0.0,
  10. -0.3,1.0,-0.5,0.0,0.3,1.0 };
  11.  
  12. GLfloat ctlarraysecond[3][2][4] =
  13. { 0.5,0.0,-0.5,1.0,0.5,0.0,
  14. 0.5,1.0,0.0,0.866*0.55,-0.5*0.55, 0.55,
  15. 0.0,0.866*0.55,0.5*0.55, 0.55, -0.5,0.0,
  16. -0.5,1.0,-0.5,0.0,0.5,1.0 };
  17. GLfloat TexP[] = { 1.0,0.0,0.0,0.0 };
  18. GLfloat TexP1[] = { 0.0,1.0,0.0,0.0 };
  19. GLfloat TexP2[] = { 0.0,0.0,1.0,0.0 };
  20. 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 };
  21. GLfloat texptsfirst[2][2][2] = { 0,0,0,8,8,0,8,8 };
  22. GLfloat texptssecond[2][2][2] = { 0,0,0,1,1,0,1,1 };
  23. GLUnurbsObj *theNurb;
  24. GLUquadricObj* theqw; GLubyte *Iz_RGB;
  25.  
  26.  
  27.  
  28. void initfirst()
  29. {
  30.     glClearColor(0.5, 0.75, 0.75, 1);
  31.     theNurb = gluNewNurbsRenderer();
  32.     theqw = gluNewQuadric();
  33.     glEnable(GL_DEPTH_TEST);
  34.     gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0);
  35.     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  36.     glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  37.     glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  38.     glTexImage1D(GL_TEXTURE_1D, 0, 3, 8, 0, GL_RGB, GL_UNSIGNED_BYTE, TexI);
  39.     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
  40.     gluQuadricTexture(theqw, true);
  41.     glEnable(GL_TEXTURE_1D);
  42. }
  43.  
  44. void Displayfirst() {
  45.     GLfloat knot[] = { 0.0,0.0,0.0,1.0,1.0,1.0 };
  46.     GLfloat knot1[] = { 0.0,0.0,1.0,1.0 };
  47.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  48.     glRotatef(1, 1.0, 1.0, 1.0);
  49.     glColor3f(1, 0, 0);
  50.     //glEnable(GL_TEXTURE_GEN_S);
  51.     //glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
  52.     //glTexGenfv(GL_S, GL_OBJECT_PLANE, TexP2);
  53.     glMap2f(GL_MAP2_TEXTURE_COORD_1, 0, 1, 2, 2, 0, 1, 4, 2, &texptsfirst[0][0][0]);
  54.     glEnable(GL_MAP2_TEXTURE_COORD_1);
  55.     gluSphere(theqw, 0.3, 50, 50);
  56.     //glutSolidTeapot(0.3);
  57.     gluBeginSurface(theNurb);
  58.     gluNurbsSurface
  59.     (theNurb,
  60.         6, knot,
  61.         4, knot1,
  62.         2 * 4,
  63.         4,
  64.         &ctlarrayfirst[0][0][0],
  65.         3, 2,
  66.         GL_MAP2_VERTEX_4);
  67.     gluEndSurface(theNurb);
  68.     glutPostRedisplay(); glutSwapBuffers();
  69. }
  70.  
  71. void file_read() {
  72.     FILE* stream;
  73.     BITMAPFILEHEADER FileHeader;
  74.     BITMAPINFOHEADER InfoHeader;
  75.     errno_t err = fopen_s(&stream, "C:\\Users\\st\\Documents\\Thinking_Face_Emoji.bmp", "rb");
  76.     fread(&FileHeader, sizeof(FileHeader), 1, stream);
  77.     fread(&InfoHeader, sizeof(InfoHeader), 1, stream);
  78.     fseek(stream, FileHeader.bfOffBits, SEEK_SET);
  79.     int w = InfoHeader.biWidth;
  80.     int h = InfoHeader.biHeight;
  81.     Iz_RGB = (GLubyte*)malloc(w*h * 3);
  82.     fread(Iz_RGB, w*h * 3, 1, stream);
  83.     fclose(stream);
  84.     for (int i = 0; i < w*h * 3; i += 3) {
  85.         GLubyte m1 = Iz_RGB[i];
  86.         Iz_RGB[i] = Iz_RGB[i + 2];
  87.         Iz_RGB[i + 2] = m1;
  88.     }
  89. }
  90.  
  91. void initsecond() {
  92.     glClearColor(0.1, 0.98, 0.3, 1);
  93.     theNurb = gluNewNurbsRenderer();
  94.     theqw = gluNewQuadric();
  95.     glEnable(GL_DEPTH_TEST);
  96.     gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0);
  97.     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  98.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  99.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  100.     glTexImage2D(GL_TEXTURE_2D, 0, 3, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, Iz_RGB);
  101.     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
  102.     gluQuadricTexture(theqw, true);
  103.     glEnable(GL_TEXTURE_2D);
  104.     free(Iz_RGB);
  105. }
  106.  
  107. void Displaysecond() {
  108.     GLfloat knot[] = { 0.0,0.0,0.0,1.0,1.0,1.0 };
  109.     GLfloat knot1[] = { 0.0,0.0,1.0,1.0 };
  110.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  111.     glRotatef(1.5, 1.0, 1.0, 1.0);
  112.     glColor3f(1, 0, 0);
  113.     glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, &texptsfirst[0][0][0]);
  114.     glEnable(GL_MAP2_TEXTURE_COORD_2);
  115.     gluSphere(theqw, 0.3, 50, 50);
  116.     gluBeginSurface(theNurb);
  117.     gluNurbsSurface
  118.     (theNurb,
  119.         6, knot,
  120.         4, knot1,
  121.         2 * 4,
  122.         4,
  123.         &ctlarraysecond[0][0][0],
  124.         3, 2,
  125.         GL_MAP2_VERTEX_4);
  126.     gluEndSurface(theNurb);
  127.     glutPostRedisplay(); glutSwapBuffers();
  128. }
  129.  
  130.  
  131.  
  132.  
  133. void main() {
  134.     file_read();
  135.     glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
  136.     glutInitWindowSize(480, 480);
  137.     glutInitWindowPosition(100, 100);
  138.     glutCreateWindow(" ");
  139.     initsecond();
  140.     glutDisplayFunc(Displaysecond);
  141.     glutMainLoop();
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement