int main(int argc, char** argv) { /* Initialize GLUT and GLEW */ kuhl_ogl_init(&argc, argv, 512, 512, 32, GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE, 4); if(argc == 1) { msg(FATAL, "You didn't provide the name of the object(s) that you want to track."); msg(FATAL, "Usage: %s vrpnObjectName1 vrpnObjectName2 ..."); exit(EXIT_FAILURE); } global_argc = argc; global_argv = argv; // setup callbacks glutDisplayFunc(display); glutKeyboardFunc(keyboard); /* Compile and link a GLSL program composed of a vertex shader and * a fragment shader. */ program = kuhl_create_program(GLSL_VERT_FILE, GLSL_FRAG_FILE); dgr_init(); /* Initialize DGR based on environment variables. */ projmat_init(); /* Figure out which projection matrix we should use based on environment variables */ viewmat_init(initCamPos, initCamLook, initCamUp); // Clear the screen while things might be loading glClearColor(.2,.2,.2,1); glClear(GL_COLOR_BUFFER_BIT); // Load the model from the file //modelgeom = kuhl_load_model("../models/cube/cube.obj", NULL, program, NULL); modelgeom = kuhl_load_model("../models/origin/origin.obj", NULL, program, NULL); init_geometryQuad(&quad, program); label = malloc(sizeof(GLuint)*argc-1); labelAspectRatio = malloc(sizeof(float)*argc-1); float labelColor[3] = { 1,1,1 }; float labelBg[4] = { 0,0,0,.3 }; for(int i=1; i<argc; i++) { labelAspectRatio[i-1] = kuhl_make_label(argv[i], &(label[i-1]), labelColor, labelBg, 24); } kuhl_getfps_init(&fps_state); /* Tell GLUT to start running the main loop and to call display(), * keyboard(), etc callback methods as needed. */ glutMainLoop(); /* // An alternative approach: while(1) glutMainLoopEvent(); */ exit(EXIT_SUCCESS); }
int main(int argc, char** argv) { char *modelFilename = NULL; char *modelTexturePath = NULL; int currentArgIndex = 1; // skip program name int usageError = 0; while(argc > currentArgIndex) { if(strcmp(argv[currentArgIndex], "--fit") == 0) fitToView = 1; else if(strcmp(argv[currentArgIndex], "--origin") == 0) showOrigin = 1; else if(modelFilename == NULL) { modelFilename = argv[currentArgIndex]; modelTexturePath = NULL; } else if(modelTexturePath == NULL) modelTexturePath = argv[currentArgIndex]; else { usageError = 1; } currentArgIndex++; } // If we have no model to load or if there were too many arguments. if(modelFilename == NULL || usageError) { printf("Usage:\n" "%s [--fit] [--origin] modelFile - Textures are assumed to be in the same directory as the model.\n" "- or -\n" "%s [--fit] [--origin] modelFile texturePath\n" "If the optional --fit parameter is included, the model will be scaled and translated to fit within the approximate view of the camera\n" "If the optional --origin parameter is included, a box will is drawn at the origin and unit-length lines are drawn down each axis.\n", argv[0], argv[0]); exit(EXIT_FAILURE); } /* set up our GLUT window */ glutInit(&argc, argv); glutInitWindowSize(512, 512); glutSetOption(GLUT_MULTISAMPLE, 4); // set msaa samples; default to 4 /* Ask GLUT to for a double buffered, full color window that * includes a depth buffer */ #ifdef __APPLE__ glutInitDisplayMode(GLUT_3_2_CORE_PROFILE | GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE); #else glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE); glutInitContextVersion(3,2); glutInitContextProfile(GLUT_CORE_PROFILE); #endif glutCreateWindow(argv[0]); // set window title to executable name glEnable(GL_MULTISAMPLE); /* Initialize GLEW */ glewExperimental = GL_TRUE; GLenum glewError = glewInit(); if(glewError != GLEW_OK) { fprintf(stderr, "Error initializing GLEW: %s\n", glewGetErrorString(glewError)); exit(EXIT_FAILURE); } /* When experimental features are turned on in GLEW, the first * call to glGetError() or kuhl_errorcheck() may incorrectly * report an error. So, we call glGetError() to ensure that a * later call to glGetError() will only see correct errors. For * details, see: * http://www.opengl.org/wiki/OpenGL_Loading_Library */ glGetError(); // setup callbacks glutDisplayFunc(display); glutKeyboardFunc(keyboard); /* Compile and link a GLSL program composed of a vertex shader and * a fragment shader. */ program = kuhl_create_program(GLSL_VERT_FILE, GLSL_FRAG_FILE); dgr_init(); /* Initialize DGR based on environment variables. */ projmat_init(); /* Figure out which projection matrix we should use based on environment variables */ float initCamPos[3] = {0,1.55,2}; // 1.55m is a good approx eyeheight float initCamLook[3] = {0,0,0}; // a point the camera is facing at float initCamUp[3] = {0,1,0}; // a vector indicating which direction is up viewmat_init(initCamPos, initCamLook, initCamUp); // Clear the screen while things might be loading glClearColor(.2,.2,.2,1); glClear(GL_COLOR_BUFFER_BIT); // Load the model from the file modelgeom = kuhl_load_model(modelFilename, modelTexturePath, program, bbox); if(showOrigin) origingeom = kuhl_load_model("../models/origin/origin.obj", NULL, program, NULL); init_geometryQuad(&labelQuad, program); kuhl_getfps_init(&fps_state); /* Tell GLUT to start running the main loop and to call display(), * keyboard(), etc callback methods as needed. */ glutMainLoop(); /* // An alternative approach: while(1) glutMainLoopEvent(); */ exit(EXIT_SUCCESS); }
int main(int argc, char** argv) { char *modelFilename = NULL; char *modelTexturePath = NULL; if(argc == 2) { modelFilename = argv[1]; modelTexturePath = NULL; } else if(argc == 3) { modelFilename = argv[1]; modelTexturePath = argv[2]; } else { printf("Usage:\n" "%s modelFile - Textures are assumed to be in the same directory as the model.\n" "- or -\n" "%s modelFile texturePath\n", argv[0], argv[0]); exit(1); } /* set up our GLUT window */ glutInit(&argc, argv); glutInitWindowSize(512, 512); /* Ask GLUT to for a double buffered, full color window that * includes a depth buffer */ #ifdef FREEGLUT glutSetOption(GLUT_MULTISAMPLE, 4); // set msaa samples; default to 4 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE); glutInitContextVersion(3,2); glutInitContextProfile(GLUT_CORE_PROFILE); #else glutInitDisplayMode(GLUT_3_2_CORE_PROFILE | GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE); #endif glutCreateWindow(argv[0]); // set window title to executable name glEnable(GL_MULTISAMPLE); /* Initialize GLEW */ glewExperimental = GL_TRUE; GLenum glewError = glewInit(); if(glewError != GLEW_OK) { fprintf(stderr, "Error initializing GLEW: %s\n", glewGetErrorString(glewError)); exit(EXIT_FAILURE); } /* When experimental features are turned on in GLEW, the first * call to glGetError() or kuhl_errorcheck() may incorrectly * report an error. So, we call glGetError() to ensure that a * later call to glGetError() will only see correct errors. For * details, see: * http://www.opengl.org/wiki/OpenGL_Loading_Library */ glGetError(); // setup callbacks glutDisplayFunc(display); glutKeyboardFunc(keyboard); /* Compile and link a GLSL program composed of a vertex shader and * a fragment shader. */ program = kuhl_create_program(GLSL_VERT_FILE, GLSL_FRAG_FILE); dgr_init(); /* Initialize DGR based on environment variables. */ projmat_init(); /* Figure out which projection matrix we should use based on environment variables */ float initCamPos[3] = {0,1.55,2}; // 1.55m is a good approx eyeheight float initCamLook[3] = {0,0,0}; // a point the camera is facing at float initCamUp[3] = {0,1,0}; // a vector indicating which direction is up viewmat_init(initCamPos, initCamLook, initCamUp); // Clear the screen while things might be loading glClearColor(.2,.2,.2,1); glClear(GL_COLOR_BUFFER_BIT); // Load the model from the file modelgeom = kuhl_load_model(modelFilename, modelTexturePath, program, bbox); /* Count the number of kuhl_geometry objects for this model */ unsigned int geomCount = kuhl_geometry_count(modelgeom); /* Allocate an array of particle arrays */ particles = malloc(sizeof(particle*)*geomCount); int i = 0; for(kuhl_geometry *g = modelgeom; g != NULL; g=g->next) { /* allocate space to store velocity information for all of the * vertices in this kuhl_geometry */ particles[i] = malloc(sizeof(particle)*g->vertex_count); for(unsigned int j=0; j<g->vertex_count; j++) vec3f_set(particles[i][j].velocity, 0,0,0); /* Change the geometry to be drawn as points */ g->primitive_type = GL_POINTS; // Comment out this line to default to triangle rendering. i++; } /* Tell GLUT to start running the main loop and to call display(), * keyboard(), etc callback methods as needed. */ glutMainLoop(); /* // An alternative approach: while(1) glutMainLoopEvent(); */ exit(EXIT_SUCCESS); }