int main(int argc, char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(MY_WIND_X_POS, MY_WIND_Y_POS); glutInitWindowSize(MY_WIND_X_SIZE, MY_WIND_Y_SIZE); glutCreateWindow("B581 template code with 3D lighting"); glutDisplayFunc (myDisplay); glutReshapeFunc (myReshape); glutMouseFunc (myButton); glutMotionFunc (myMotion); glutPassiveMotionFunc (NULL); glutIdleFunc (NULL); glutKeyboardFunc (myKeyboard); glutVisibilityFunc (myVisibility); fprintf(stderr,"Press ESC or 'q' to Exit.\n"); myInitGL(); myInitData(&argc,argv); /* pass command line arguments for texture */ /* initialize GLUT menu handler as last one, to take over access to GLUT_RIGHT_BUTTON, regardles to what other handlers did to it: */ myInitMenus(); glutTimerFunc(0,timer,0); glutMainLoop(); return(EXIT_SUCCESS); } /* main() */
int main( int argc, const char *argv[] ) { // reads model into global glb_model; ON::Begin(); ON_TextLog error_log; ON_BOOL32 bOK; int window_width = 500; int window_height = 500; //double port_aspect = ((double)window_width)/((double)window_height); // read the file into model if ( argc != 2 ) { printf("Syntax: %s filename.3dm\n",argv[0] ); return 0; } const char* sFileName = argv[1]; printf("\nFile: %s\n", sFileName ); // read the file CModel model; if ( !model.Read( sFileName, &error_log ) ) { // read failed error_log.Print("Unable to read file %s\n",sFileName); return 1; } glb_model = &model; // set bbox = world bounding box of all the objects model.m_bbox = model.BoundingBox(); if ( !model.m_bbox.IsValid() ) { // nothing to look at in this model return 2; } // set model.m_view if ( model.m_settings.m_views.Count() > 0 ) { // use first viewport projection in file double angle; model.m_view.m_vp = model.m_settings.m_views[0].m_vp; model.m_view.m_target = model.m_settings.m_views[0].m_target; model.m_view.m_vp.GetCameraAngle( &angle ); model.m_view.m_vp.Extents( angle, model.m_bbox ); } else { GetDefaultView( model.m_bbox, model.m_view ); } // If needed, enlarge frustum so its aspect matches the window's aspect. // Since the Rhino file does not store the far frustum distance in the // file, viewports read from a Rhil file need to have the frustum's far // value set by inspecting the bounding box of the geometry to be // displayed. /////////////////////////////////////////////////////////////////// // // GL stuff starts here // for(;;) { #if defined(ON_EXAMPLE_GL_USE_GLAUX) wchar_t sWindowTitleString[256]; #endif #if defined(ON_EXAMPLE_GL_USE_GLUT) char sWindowTitleString[256]; #endif sWindowTitleString[255] = 0; if ( argv[0] && argv[0][0] ) { int i; for ( i = 0; i < 254 && argv[0][i]; i++ ) sWindowTitleString[i] = argv[0][i]; sWindowTitleString[i] = 0; } #if defined(ON_EXAMPLE_GL_USE_GLAUX) auxInitPosition( 0, 0, window_width, window_height ); auxInitDisplayMode( AUX_SINGLE | AUX_RGB | AUX_DEPTH ); auxInitWindow( sWindowTitleString ); // register event handler functions auxIdleFunc( 0 ); auxReshapeFunc( myGLAUX_Reshape ); auxMouseFunc( AUX_LEFTBUTTON, AUX_MOUSEDOWN, myGLAUX_MouseLeftEvent ); auxMouseFunc( AUX_LEFTBUTTON, AUX_MOUSEUP, myGLAUX_MouseLeftEvent ); auxMouseFunc( AUX_MIDDLEBUTTON, AUX_MOUSEDOWN, myGLAUX_MouseMiddleEvent ); auxMouseFunc( AUX_MIDDLEBUTTON, AUX_MOUSEUP, myGLAUX_MouseMiddleEvent ); auxMouseFunc( AUX_RIGHTBUTTON, AUX_MOUSEDOWN, myGLAUX_MouseRightEvent ); auxMouseFunc( AUX_RIGHTBUTTON, AUX_MOUSEUP, myGLAUX_MouseRightEvent ); auxKeyFunc( AUX_LEFT, myKeyLeftArrowEvent ); auxKeyFunc( AUX_RIGHT, myKeyRightArrowEvent ); auxKeyFunc( AUX_UP, myKeyUpArrowEvent ); auxKeyFunc( AUX_DOWN, myKeyDownArrowEvent ); auxKeyFunc( AUX_E, myKeyViewExtents ); auxKeyFunc( AUX_e, myKeyViewExtents ); auxKeyFunc( AUX_Z, myKeyViewExtents ); auxKeyFunc( AUX_z, myKeyViewExtents ); #endif #if defined(ON_EXAMPLE_GL_USE_GLUT) glutInit(&argc,(char**)argv); glutInitWindowPosition( 0, 0); glutInitWindowSize( window_width, window_height ); glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH ); glutCreateWindow( sWindowTitleString ); // register event handler functions glutIdleFunc( 0 ); glutReshapeFunc( myGLUT_Reshape ); glutMouseFunc( myGLUT_MouseEvent ); glutKeyboardFunc( myGLUT_KeyboardEvent ); glutSpecialFunc( myGLUT_SpecialKeyEvent ); glutDisplayFunc( myDisplay ); #endif // setup model view matrix, GL defaults, and the GL NURBS renderer GLUnurbsObj* pTheGLNURBSRender = NULL; // OpenGL NURBS rendering context bOK = myInitGL( model.m_view.m_vp, pTheGLNURBSRender ); if ( bOK ) { // build display list myBuildDisplayList( glb_display_list_number, pTheGLNURBSRender, model ); // look at it #if defined(ON_EXAMPLE_GL_USE_GLAUX) auxMainLoop( myDisplay ); #endif #if defined(ON_EXAMPLE_GL_USE_GLUT) glutMainLoop( ); #endif } gluDeleteNurbsRenderer( pTheGLNURBSRender ); break; } // // GL stuff ends here // /////////////////////////////////////////////////////////////////// ON::End(); return 0; }