+ drawLine();\r
+ \r
+ // Draw teapot for a test object\r
+ glPushMatrix();\r
+ glTranslatef(0.0, 0.5, 0.0); // **NOTE: Teapot does not rest on surface\r
+ glColor3f(0.0, 0.0, 0.0);\r
+ glutSolidTeapot(1);\r
+ glPopMatrix();\r
+\r
+ // Draw a white ball over the light source\r
+ glPushMatrix();\r
+ glDisable(GL_LIGHTING);\r
+ glColor3f(1.0, 1.0, 0.0);\r
+ glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]);\r
+ glutSolidSphere(1.0, 50, 50);\r
+ glEnable(GL_LIGHTING);\r
+ glPopMatrix();\r
+\r
+ glPopMatrix();\r
+\r
+ glutSwapBuffers();\r
+}\r
+\r
+/**\r
+ * init function; sets initial OpenGL state\r
+ */\r
+void init() {\r
+ //glMatrixMode(GL_PROJECTION);\r
+ //glLoadIdentity();\r
+\r
+ //gluPerspective(\r
+ // 60.0, /* field of view in degree */\r
+ // 1.0, /* aspect ratio */\r
+ // nearClip, /* Z near */\r
+ // farClip /* Z far */\r
+ // );\r
+ \r
+ glMatrixMode(GL_MODELVIEW);\r
+ glLoadIdentity();\r
+\r
+ // **NOTE: Needs tidy\r
+glEnable(GL_NORMALIZE);\r
+ glLightfv(GL_LIGHT0, GL_POSITION, light0_pos);\r
+ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0);\r
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0);\r
+ glLightfv(GL_LIGHT0, GL_SPECULAR, specular0);\r
+ GLfloat direction0[] = {0.0, 0.0, 0.0};\r
+ glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direction0);\r
+ glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 90.0);\r
+ glLightModelfv(GL_LIGHT_MODEL_AMBIENT, glightmodel);\r
+\r
+ GLfloat ambient[] = {0.2, 0.2, 0.2, 1.0};\r
+ GLfloat diffuse[] = {1.0, 0.8, 0.0, 1.0};\r
+ GLfloat specular[] = {1.0, 1.0, 1.0, 1.0};\r
+ GLfloat shine = 100.0;\r
+ glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);\r
+ glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);\r
+ glMaterialfv(GL_FRONT, GL_SPECULAR, specular);\r
+ glMaterialf(GL_FRONT, GL_SHININESS, shine);\r
+\r
+ GLfloat emission[] = {0.0, 0.3, 0.3, 1.0};\r
+ glMaterialfv(GL_FRONT, GL_EMISSION, emission);\r
+\r
+ glEnable(GL_LIGHT0);\r
+ glEnable(GL_LIGHTING);\r
+ //glEnable(GL_COLOR_MATERIAL);\r
+ //glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );\r
+ //glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, specular0);\r
+ //glMaterialfv( GL_FRONT_AND_BACK, GL_EMISSION, emission0);\r
+\r
+ \r
+\r
+}\r
+\r
+/**\r
+ * Main function\r
+ * @param argc Number of arguments\r
+ * @param argv Array of arguments\r
+ * @return Program exit code\r
+ */\r
+int main(int argc, char **argv) {\r
+ if(argc>1)\r
+ strcpy(dataDir, argv[1]);\r
+ else if(opendir(dirDefault1))\r
+ strcpy(dataDir, dirDefault1);\r
+ else if(opendir(dirDefault2))\r
+ strcpy(dataDir, dirDefault2);\r
+ else fileErr(dirDefault1);\r
+\r
+ for(int i=0; i<NMESH; i++) meshes[i]=NULL;\r
+ for(int i=0; i<NTEXTURE; i++) textures[i]=NULL;\r
+\r
+ glutInit(&argc, argv);\r
+\r
+ glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);\r
+\r
+ glutInitWindowSize(500, 500);\r
+ glutCreateWindow("Scene Editor");\r
+\r
+ glShadeModel(GL_SMOOTH); // Enables Smooth Shading\r
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background\r
+ glClearDepth(1.0f); // Depth Buffer Setup\r
+ glDepthRange(0,1);\r
+ glEnable(GL_DEPTH_TEST); // Enables Depth Testing\r
+ glDepthFunc(GL_LEQUAL); // the type\r
+ glEnable(GL_CULL_FACE);\r
+ glEnable(GL_TEXTURE_2D);\r
+ glEnable(GL_BLEND);\r
+ glLineWidth(1.0);\r
+\r
+ glMatrixMode(GL_PROJECTION);\r
+ gluPerspective(\r
+ 40.0, /* field of view in degree */\r
+ 1.0, /* aspect ratio */\r
+ 1.0, /* Z near */\r
+ 100.0 /* Z far */\r
+ );\r
+\r
+ glMatrixMode(GL_MODELVIEW);\r
+ gluLookAt(\r
+ 0.0, 35.0, -20.0, /* eye is at (0,8,60) */\r
+ 0.0, 10.0, 0.0, /* center is at (0,8,0) */\r
+ 0.0, 1.0, 0.0 /* up is in postivie Y direction */\r
+ );\r
+\r
+ glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);\r
+\r
+ glutReshapeFunc(windowReshape);\r
+ glutDisplayFunc(display);\r
+ glutMouseFunc(mouse);\r
+ glutKeyboardFunc(keyboard);\r
+ glutMotionFunc(motion);\r
+\r
+ makeMenu();\r
+\r
+ init();\r
+\r
+ glutMainLoop();\r