#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <GL/glut.h> #include <math.h>
#include <GL/glext.h>
#define windowWidth 800 #define windowHeight 600
void display(void); void bmpReader(void); static GLint imagewidth; static GLint imageheight; static GLint pixellength; static GLubyte* pixeldata;
GLfloat red=0.0,green=0.0,blue=0.0;
void init(void); void Ttttttest(void); void Tttest(int selOption); void Testtt(int colOption);
int selFlag=1;
struct Coordinate{ GLfloat x; GLfloat y; GLfloat z; }cameraPos,sightLin,defaultVal;
static GLint demo_display_list; static float angle=0.0,ratio=0.0;
void sightLine(int w,int h); void keyboardDemo(int key,int x,int y); void rotate(GLfloat ang); void transla(GLint direct); void displayDemo(void); GLuint speupList(void); void initList(void); void displayDemo(void);
int main(int argc,char* argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGB); glutInitWindowPosition(233,233); glutInitWindowSize(windowWidth,windowHeight); int forSub=glutCreateWindow("F");
init(); initList();
int subArgument=glutCreateMenu(Testtt); glutAddMenuEntry("Red",1); glutAddMenuEntry("Green",2); glutAddMenuEntry("Blue",3); glutCreateMenu(Tttest); glutAddMenuEntry("Roming",3); glutAddMenuEntry("Triangle",1); glutAddMenuEntry("Rectangle",2); glutAddSubMenu("Color",subArgument); glutAttachMenu(GLUT_RIGHT_BUTTON); glutSpecialFunc(keyboardDemo); glutReshapeFunc(sightLine); glutDisplayFunc(displayDemo);
glutMainLoop(); }
void init(void){ glClearColor(0.0,0.2,1.0,1.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,800.0,0.0,600.0);
cameraPos.x=0.0;cameraPos.y=1.75;cameraPos.z=5.0; sightLin.x=0.0;sightLin.y=0.0;sightLin.z=-1.0; defaultVal.x=0.0;defaultVal.y=1.0;defaultVal.z=0.0; }
void Ttttttest(void){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(red,green,blue); if (selFlag==1){ glBegin(GL_TRIANGLES); glVertex2d(100.0,100.0); glVertex2d(700.0,100.0); glVertex2d(400.0,500.0); glEnd(); } else if (selFlag==2){ glBegin(GL_POLYGON); glVertex2d(100.0,100.0); glVertex2d(700.0,100.0); glVertex2d(700.0,500.0); glVertex2d(100.0,500.0); glEnd(); } else if (selFlag==3){ ; } glFlush(); }
void Tttest(int selOption){ switch (selOption){ case 1: selFlag=1; break; case 2: selFlag=2; break; case 3: selFlag=3; default: break; } glutPostRedisplay(); }
void Testtt(int colOption){ switch (colOption){ case 1: red=1.0;green=0.0;blue=0.0; break; case 2: red=0.0;green=1.0;blue=0.0; break; case 3: red=0.0;green=0.0;blue=1.0; break; default: break; } glutPostRedisplay(); }
void sightLine(int w,int h){ ratio=w/h; glMatrixMode(GL_PROJECTION); glLoadIdentity();
glViewport(0,0,w,h);
gluPerspective(45,ratio,1,1000);
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
gluLookAt(cameraPos.x,cameraPos.y,cameraPos.z, cameraPos.x+sightLin.x,cameraPos.y+sightLin.y,cameraPos.z+sightLin.z, defaultVal.x,defaultVal.y,defaultVal.z); }
void keyboardDemo(int key,int x,int y){ switch (key){ case GLUT_KEY_LEFT: angle-=0.05f;rotate(angle); break; case GLUT_KEY_RIGHT: angle+=0.05f;rotate(angle); break; case GLUT_KEY_UP: transla(1); break; case GLUT_KEY_DOWN: transla(-1); break; default: break; } glutPostRedisplay(); }
void rotate(GLfloat ang){ sightLin.x=sin(ang); sightLin.z=-cos(ang); glLoadIdentity(); gluLookAt(cameraPos.x,cameraPos.y,cameraPos.z, cameraPos.x+sightLin.x,cameraPos.y+sightLin.y,cameraPos.z+sightLin.z, defaultVal.x,defaultVal.y,defaultVal.z); }
void transla(GLint direct){ cameraPos.x=cameraPos.x+direct*sightLin.x*0.3; cameraPos.z=cameraPos.z+direct*sightLin.z*0.3; glLoadIdentity(); gluLookAt(cameraPos.x,cameraPos.y,cameraPos.z, cameraPos.x+sightLin.x,cameraPos.y+sightLin.y,cameraPos.z+sightLin.z, defaultVal.x,defaultVal.y,defaultVal.z); }
void listDemo(void){ glColor3f(0.0,0.0,0.0); glRotated(90,0,1,0); glTranslatef(0.0,0.7,0.0); glutSolidTorus(0.15,0.25,15,40); glRotatef(90,0,-1,0);
glColor3f(0.58,0.29,0.0); glTranslatef(0.0,0.55,0.0); glutSolidCube(0.5); glTranslatef(0.0,0.37,0.0); glutSolidCube(0.5);
glColor3f(0.68,0.30,0.0); glTranslatef(0.0,0.63,0.0); glScalef(1.7,1.0,1.0); glutWireCube(0.75005);
glColor3f(0.58,0.29,0.0); glutSolidCube(0.75);
glColor3f(0.0,0.0,0.0); glTranslatef(-0.2,0.1,0.4); glScalef(0.5,1.0,0.7); glutSolidSphere(0.1,20,20); glTranslatef(0.8,0.0,0.0); glutSolidSphere(0.1,20,20);
glColor3f(1.0,0.5,0.5); glTranslatef(-0.4,-0.2,0.0); glRotatef(0.0,1.0,0.0,0.0); glutSolidCone(0.1,0.5,20,7); }
GLuint speupList(void){ GLuint modelList; modelList=glGenLists(1); glNewList(modelList,GL_COMPILE); listDemo(); glEndList(); return modelList; }
void initList(void){ glEnable(GL_DEPTH_TEST); demo_display_list=speupList(); }
void displayDemo(void){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f(0.2,1.0,0.0); glBegin(GL_QUADS); glVertex3f(-100,0,-100); glVertex3f(100,0,-100); glVertex3f(100,0,100); glVertex3f(-100,0,100); glEnd(); for (int i=-3;i<3;i++){ for (int j=-3;j<3;j++){ glPushMatrix(); glTranslatef(i*10.0,0,j*10.0); glCallList(demo_display_list); glPopMatrix(); } }
glutSwapBuffers(); }
void display(void){
glDrawPixels(imagewidth,imageheight,GL_BGR_EXT,GL_UNSIGNED_BYTE,pixeldata);
glFlush(); glutSwapBuffers(); }
void bmpReader(void){ FILE* pfile=fopen("D:\\Documents\\desktop桌面文件\\期末 2018秋季学期 大二上学期\\bliss.bmp","rb"); if(pfile == 0) exit(0);
fseek(pfile,0x0012,SEEK_SET); fread(&imagewidth,sizeof(imagewidth),1,pfile); fread(&imageheight,sizeof(imageheight),1,pfile);
pixellength=imagewidth*3; while(pixellength%4 != 0)pixellength++; pixellength *= imageheight;
pixeldata = (GLubyte*)malloc(pixellength); if(pixeldata == 0) exit(0);
fseek(pfile,54,SEEK_SET); fread(pixeldata,pixellength,1,pfile);
fclose(pfile);
display(); free(pixeldata); }
|