Sign in to follow this  

Open_GL program please help!!

This topic is 3570 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

In the following opengl program I am trying to make octagone column with startpoint (0,0,0). Although my program compiles, I am unable to find why my column is not visible. I would be greateful if somebody could have a look at it and let me know! :-) #include <stdio.h> #include <math.h> /* in case math.h dose not define PI */ #ifndef PI #define PI 3.141593 #endif /* include openGL, glUtility and utility toolkit headers*/ #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> /* define values for the view flag */ #define FIXED 0 #define ROBOT 1 #define PLAN 2 /* declare the function prototypes */ void display(void); void reshape(int, int); void init_ground(void); void init_lights(void); void special(int, int, int); void menu(int); /* declare the global variables holding display lists*/ GLuint ground; /* a flag for the viewing state */ GLuint look_flag=FIXED; int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); /******************************** CREATING THE WINDOW ********************************/ glutInitWindowSize(500, 500); glutCreateWindow("Sat Sales"); glClearColor (1.0, 1.0, 1.0, 0.0); glEnable(GL_DEPTH_TEST); glutReshapeFunc(reshape); glutDisplayFunc(display); glutSpecialFunc(special); init_ground(); init_lights(); glutCreateMenu(menu); glutAddMenuEntry("Fixed View", FIXED); // glutAddMenuEntry("Front View", FRONT); glutAddMenuEntry("Plan View", PLAN); glutAddMenuEntry("Exit", -1); glutAttachMenu(GLUT_MIDDLE_BUTTON); glutMainLoop(); return 0; } void reshape(int w, int h){ glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /********************************************************* The plan view is an orthographic projection it must project the project squares as squares not rectangles. So when the width is greater than the height the `bottom' and `top' values are scaled. This adds white space at the top and bottom of the image but ensures the geometry is correct. The opposite applies when h > w. ***********************************************************/ if(look_flag==PLAN){ if(w <= h) glOrtho(-110, 110, -110*(GLfloat)h/(GLfloat)w, 110*(GLfloat)h/(GLfloat)w, 10, 200); else glOrtho(-110*(GLfloat)w/(GLfloat)h, 110*(GLfloat)w/(GLfloat)h, -110, 110, 10, 200); }else gluPerspective(120.0, ((GLfloat) w)/((GLfloat)h), 1.0, 1000.0); glMatrixMode(GL_MODELVIEW); glutPostRedisplay(); return; } void display(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); if(look_flag==FIXED){ gluLookAt(-65.0, 15.0, 70.0, 70.0, 10.0, -70.0, 0.0, 1.0, 0.0); }else{ gluLookAt(0.0, 100.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0); } init_lights(); glCallList(ground); glFlush(); glutSwapBuffers(); return; } void init_lights(){ GLfloat light0_position[]={70.0, 50.0, -90.0, 1.0}; GLfloat light1_position[]={-110.0, 60.0, 120.0, 1.0}; GLfloat light2_position[]={0.0, 40, 0.0, 1.0}; GLfloat amb_and_diff[]={0.8, 0.4, 0.5, 1.0}; GLfloat global_abm[]={0.2, 0.2, 0.2, 1.0}; GLfloat specular[] = {0.3, 0.3, 0.3, 1.0}; glEnable(GL_LIGHTING); glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, global_abm); /********************************** Part 2: your code goes here **********************************/ return; } void init_ground(){ GLfloat amb_and_diffuse[]= {0.1, 0.7, 0.1, 1.0}; GLfloat emission[]= {0.0, 0.2, 0.0, 1.0}; ground = glGenLists(1); if(ground!=0){ glNewList(ground, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, amb_and_diffuse); glMaterialfv(GL_FRONT, GL_EMISSION, emission); glBegin(GL_QUADS); glNormal3f(0.0, 1.0, 0.0); glVertex3f(-100.0, 0.0, -100.0); glVertex3f(100.0, 0.0,-100.0); glVertex3f(100.0, 0.0, 100.0); glVertex3f(-100.0, 0.0, 100.0); glEnd(); glEndList(); }else fprintf(stderr, "Error: OpenGL could not obtain a list for the ground\n"); return; } /************************************** THIS FUNCTION UTILISES THE ARROW KEYS ***************************************/ void special(int key, int x, int y){ float X, Z; /********************************************** The robot moves forward and backward in its current attitude. This requires a bit of trig to find the X and Z increments and more complicated guards on the motion. ************************************************/ /* switch(key){ case GLUT_KEY_DOWN: X = sin(robot_angle*PI/180); Z = cos(robot_angle*PI/180); if((X>0.0 && robotX<=-95) || (X<0.0 && robotX>=95) || (Z>0.0 && robotZ<=-95) || (Z<0.0 && robotZ>=95)) break; robotX -= X; robotZ -= Z; break; case GLUT_KEY_UP: X = sin(robot_angle*PI/180); Z = cos(robot_angle*PI/180); if((X>0.0 && robotX>=95) || (X<0.0 && robotX<=-95) || (Z>0.0 && robotZ>=95) || (Z<0.0 && robotZ<=-95)) break; robotX += X; robotZ += Z; break; case GLUT_KEY_RIGHT: robot_angle-=5; break; case GLUT_KEY_LEFT: robot_angle+=5; break; default: fprintf(stdout, "No function attached to key.\n"); }*/ glutPostRedisplay(); return; } /********************************************* The menue is used to set the view it must therefor change the projection matrices when entering or leaving the PLAN state. This requires the use of `glutGet' to find the current window size. *********************************************/ void menu(int id){ float w, h; if(id==look_flag) return; if(id<0) exit(0); if(id==PLAN){ w = (float) glutGet(GLUT_WINDOW_WIDTH ); h = (float) glutGet(GLUT_WINDOW_HEIGHT ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w <= h) glOrtho(-110, 110, -110*(GLfloat)h/(GLfloat)w, 110*(GLfloat)h/(GLfloat)w, 10, 200); else glOrtho(-110*(GLfloat)w/(GLfloat)h, 110*(GLfloat)w/(GLfloat)h, -110, 110, 10, 200); glMatrixMode(GL_MODELVIEW); }else if(look_flag==PLAN){ w = (float) glutGet(GLUT_WINDOW_WIDTH ); h = (float) glutGet(GLUT_WINDOW_HEIGHT ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(120.0, ((GLfloat) w)/((GLfloat)h), 1.0, 1000.0); glMatrixMode(GL_MODELVIEW); } look_flag=id; glutPostRedisplay(); return; }

Share this post


Link to post
Share on other sites
And if at all possible, could you please add some comments to make it easier to tell what you are trying to do? Thanks.

Share this post


Link to post
Share on other sites

This topic is 3570 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this