-/**\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
-\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
- glutInitWindowSize(500, 500);\r
- glutCreateWindow("Scene Editor");\r
- glutReshapeFunc(windowReshape);\r
- glutDisplayFunc(display);\r
- glutMouseFunc(mouse);\r
- glEnable(GL_DEPTH_TEST); // Enable hidden surface removal\r
-\r
- makeMenu();\r
- glutMainLoop();\r
-}\r
+int\r
+main(int argc, char **argv)\r
+{\r
+ int i;\r
+\r
+ glutInit(&argc, argv);\r
+\r
+ for (i=1; i<argc; i++) {\r
+ if (!strcmp("-linear", argv[i])) {\r
+ linearFiltering = 1;\r
+ } else if (!strcmp("-mipmap", argv[i])) {\r
+ useMipmaps = 1;\r
+ } else if (!strcmp("-ext", argv[i])) {\r
+ forceExtension = 1;\r
+ }\r
+ }\r
+\r
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL | GLUT_MULTISAMPLE);\r
+\r
+#if 1\r
+ /* In GLUT 4.0, you'll be able to do this an be sure to\r
+ get 2 bits of stencil if the machine has it for you. */\r
+ glutInitDisplayString("samples stencil>=2 rgb double depth");\r
+#endif\r
+\r
+ glutCreateWindow("Shadowy Leapin' Lizards");\r
+\r
+ if (glutGet(GLUT_WINDOW_STENCIL_SIZE) <= 1) {\r
+ printf("dinoshade: Sorry, I need at least 2 bits of stencil.\n");\r
+ exit(1);\r
+ }\r
+\r
+ /* Register GLUT callbacks. */\r
+ glutDisplayFunc(redraw);\r
+ glutMouseFunc(mouse);\r
+ glutMotionFunc(motion);\r
+ glutVisibilityFunc(visible);\r
+ glutKeyboardFunc(key);\r
+ glutSpecialFunc(special);\r
+\r
+ glutCreateMenu(controlLights);\r
+\r
+ glutAddMenuEntry("Toggle motion", M_MOTION);\r
+ glutAddMenuEntry("-----------------------", M_NONE);\r
+ glutAddMenuEntry("Toggle light", M_LIGHT);\r
+ glutAddMenuEntry("Toggle texture", M_TEXTURE);\r
+ glutAddMenuEntry("Toggle shadows", M_SHADOWS);\r
+ glutAddMenuEntry("Toggle reflection", M_REFLECTION);\r
+ glutAddMenuEntry("Toggle dinosaur", M_DINOSAUR);\r
+ glutAddMenuEntry("-----------------------", M_NONE);\r
+ glutAddMenuEntry("Toggle reflection stenciling", M_STENCIL_REFLECTION);\r
+ glutAddMenuEntry("Toggle shadow stenciling", M_STENCIL_SHADOW);\r
+ glutAddMenuEntry("Toggle shadow offset", M_OFFSET_SHADOW);\r
+ glutAddMenuEntry("----------------------", M_NONE);\r
+ glutAddMenuEntry("Positional light", M_POSITIONAL);\r
+ glutAddMenuEntry("Directional light", M_DIRECTIONAL);\r
+ glutAddMenuEntry("-----------------------", M_NONE);\r
+ glutAddMenuEntry("Toggle performance", M_PERFORMANCE);\r
+ glutAttachMenu(GLUT_RIGHT_BUTTON);\r
+ makeDinosaur();\r
+\r
+#ifdef GL_VERSION_1_1\r
+ if (supportsOneDotOne() && !forceExtension) {\r
+ polygonOffsetVersion = ONE_DOT_ONE;\r
+ glPolygonOffset(-2.0, -1.0);\r
+ } else\r
+#endif\r
+ {\r
+#ifdef GL_EXT_polygon_offset\r
+ /* check for the polygon offset extension */\r
+ if (glutExtensionSupported("GL_EXT_polygon_offset")) {\r
+ polygonOffsetVersion = EXTENSION;\r
+ glPolygonOffsetEXT(-0.1, -0.002);\r
+ } else\r
+#endif\r
+ {\r
+ polygonOffsetVersion = MISSING;\r
+ printf("\ndinoshine: Missing polygon offset.\n");\r
+ printf(" Expect shadow depth aliasing artifacts.\n\n");\r
+ }\r
+ }\r
+\r
+ glEnable(GL_CULL_FACE);\r
+ glEnable(GL_DEPTH_TEST);\r
+ glEnable(GL_TEXTURE_2D);\r
+ glLineWidth(3.0);\r
+\r
+ glMatrixMode(GL_PROJECTION);\r
+ gluPerspective( /* field of view in degree */ 40.0,\r
+ /* aspect ratio */ 1.0,\r
+ /* Z near */ 20.0, /* Z far */ 100.0);\r
+ glMatrixMode(GL_MODELVIEW);\r
+ gluLookAt(0.0, 8.0, 60.0, /* eye is at (0,8,60) */\r
+ 0.0, 8.0, 0.0, /* center is at (0,8,0) */\r
+ 0.0, 1.0, 0.); /* up is in postivie Y direction */\r
+\r
+ glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);\r
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);\r
+ glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1);\r
+ glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05);\r
+ glEnable(GL_LIGHT0);\r
+ glEnable(GL_LIGHTING);\r
+\r
+ makeFloorTexture();\r
+\r
+ /* Setup floor plane for projected shadow calculations. */\r
+ findPlane(floorPlane, floorVertices[1], floorVertices[2], floorVertices[3]);\r
+\r
+ glutMainLoop();\r
+ return 0; /* ANSI C requires main to return int. */\r
+}
\ No newline at end of file