// glTex2dTri.cpp : Defines the entry point for the console application. // //#include "stdafx.h" #include "stdlib.h" #include "stdio.h" #include "GL/glut.h" #include "showPPM.h" GLfloat xpos = -1.0; void keyfn(unsigned char key, int x, int y) { printf("Key is #%c#\n", key); if(key == 'q') exit(0); } void mouseMovefn(int x, int y) { printf("Mouse moved\n"); glRotatef(10.0, 0.0, 0.0, 1.0); glutPostRedisplay(); } void mousefn(int button, int state, int x, int y) { if(button == GLUT_LEFT_BUTTON && state == GLUT_UP) xpos += 0.1; glutPostRedisplay(); } void it(int value) { int list = 1; printf("menu selection: win=%d, menu=%d\n", glutGetWindow(), glutGetMenu()); switch (value) { case 1: if (list == 1) { list = 2; } else { list = 1; } break; case 2: exit(0); break; case 3: glutAddMenuEntry("new entry", value + 9); break; case 4: glutChangeToMenuEntry(1, "toggle it for drawing", 1); glutChangeToMenuEntry(3, "motion done", 3); break; default: printf("value = %d\n", value); } } void menustate(int inuse) { printf("menu is %s\n", inuse ? "INUSE" : "not in use"); if (!inuse) { } } void MkMenus() { glutCreateMenu(it); glutAddMenuEntry("Dummy Menu", 1); glutAddMenuEntry("exit (this works)", 2); glutAddMenuEntry("new dummy menu entry", 3); glutAddMenuEntry("motion", 4); glutAttachMenu(GLUT_RIGHT_BUTTON); glutCreateMenu(it); glutAddMenuEntry("yes", 1); glutAddMenuEntry("no", 2); glutAttachMenu(GLUT_MIDDLE_BUTTON); } void display() { printf("In Display\n"); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f(0.9, 0.9, 0.9); glBegin(GL_QUADS); glNormal3f(0.0, 0.0, 1.0); glTexCoord2f(0.0, 1.0); glColor3f(1.0, 0.0, 0.0); glVertex3f(0.0, 1.0, 0.0); glTexCoord2f(0.0, 0.0); glColor3f(0.0, 1.0, 0.0); glVertex3f(0.0, 0.0, 0.0); glTexCoord2f(1.0, 0.0); glColor3f(0.5, 0.5, 0.5); glVertex3f(1.0, 0.0, 0.0); glTexCoord2f(1.0, 1.0); glColor3f(0.0, 0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glEnd(); glutSwapBuffers(); } void initLights() { GLfloat light_diffuse[] = {0.7, 0.7, 0.7, 1.0}; GLfloat light_ambient[] = {0.2, 0.2, 0.2, 1.0}; GLfloat light_position[] = {1.0, 0.0, -1.0, 0.0}; glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glShadeModel(GL_FLAT); } void setupTexture(char *filename) { GLuint TexName; glGenTextures(1, &TexName); glBindTexture(GL_TEXTURE_2D, TexName); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); TexturePPM(filename); glEnable(GL_TEXTURE_2D); } main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowPosition(50,50); glutInitWindowSize(500,500); glutCreateWindow("TEST GLUT"); glutDisplayFunc(display); glutKeyboardFunc(keyfn); glutMouseFunc(mousefn); glutMotionFunc(mouseMovefn); MkMenus(); setupTexture("img.ppm"); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); gluPerspective(20,1,.001,1000); glMatrixMode(GL_MODELVIEW); gluLookAt(0,0,5,0,0,0,0,1,0); glutMainLoop(); return 0; }