include cstdio include Windows include gl glut double GLfloat ctlarray

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
#include <cstdio>
#include <Windows.h>
#include <gl/glut.h>
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();
}