Starting from:
$35

$29

Program 4 • OOP, Inheritance, OpenGL Solution

$Id: asg4-oop-inheritance.mm,v 1.7 2017-07-24 15:56:02-07 - - $




PWD: /afs/cats.ucsc.edu/courses/cmps109-wm/Assignments/asg4-oop-opengl




URL: http://www2.ucsc.edu/courses/cmps109-wm/:/Assignments/asg4-oop-opengl/




1. Overview




In this assignment you will implement a simple graphics package using the OpenGL graphics library. Using inheritance, geometric objects will be displayed in a window. The lab workstations all run X11 so there is no problem there. When you log into the server remotely, be sure to specify the -X option, as in :

ssh -X username@unix.ucsc.edu




Before you log into the server make sure you have an X11 client running on your own workstation.




2. Program Specification




The program is presented in the form of a Unix man(1) page.




NAME




gdraw — drawing program displaying objects in a window




SYNOPSIS

gdraw [ options] [ filename]




OPTIONS

All options are recognized by getopt(3).




-@ flags




The flags specified are passed to the debugging macro. Debug output is printed to the standard error.




-w width




The initial width of the window. Default : 640.




-h height




The initial height of the window. Default : 480.




OPERANDS




Commands are read from the file whose name is given as an operand. If no filename is given, commands are read from the standard input.




COMMANDS




When the program begins, a window is created for displaying information, which consists of text and geometric objects of various kinds. The project pro-ceeds in two parts :




Shapes are defined in terms of their sizes (length, width, or vertices).



Objects are drawn in the window by drawing commands, after which they may be altered by keyboard commands.



Sizes, lengths, widths, and coördinates are all floating point numbers, and measure pixels.




Colors may be specified by name using one of the names in the file rgb.txt, or by their hexadecimal values in the form 0xRRGGBB, where RR, GG, and BB are the red, green, and blue components each specified as two hexadecimal digits in the range 00 to FF.










The define command makes a record of the definition of an shape and makes it available later for a draw command. The draw command creates an object in the screen’s object list, to be displayed when the program starts.




The following commands are recognized. Each command is on a line by itself and terminates with the newline character. If the last character on a line is a backslash (\), the command is continued onto the next line.




. . .



A comment line is ignored, as are empty lines and lines consisting only of white space.




define name text font words . . .




A text object is created by concatenating all of the words together, each separated from the next by spaces. The font is any of the seven GLUT bitmap fonts :

Fixed-8x13
Fixed-9x15
Helvetica-10
Helvetica-12
Helvetica-18
Times-Roman-10
Times-Roman-24



define name ellipse width height




An ellipse is specified with the major and minor diameters specified.




When drawn, the drawing coördinate is the center.




define name circle diameter




A circle is just an ellipse whose length and width are equal.




define name polygon x0 y0 x1 y1 x2 y2 . . .




A polygon is specified with the number of vertices being equal to the number of (x, y) coördinates given. The polygon must be convex (each interior angle less than 180 degrees). The convexity is not verified by the program, so the appearance of a non-convex polygon is undefined. The center of the polygon is at (x, y), i.e., at the average of all the x coördi-nates and the average of the y coördinates. After computing the average, it is subtracted from each of the vertices to normalize them. For exam-ple, if the vertices are specified as shown in the left side of the diagram, they are normalized to that shown on the right side, so that (x, y) changes from (. 5, . 5) to (0, 0).










(0, 1)
(1, 1)
(−. 5, +. 5)
(+. 5, +. 5)


















(. 5, . 5)




(0, 0)


















(0, 0) (1, 0) (−. 5, −. 5) (+. 5, −. 5)









define name rectangle width height




A rectangle with the given width and height is defined with strictly hori-zontal and vertical lines with the given thickness. When drawn, the drawing coördinates will be the center.




define name square width




A square is a rectangle with equal width and height.




define name diamond width height




A diamond’s width is from the leftmost to rightmost point and its height is from topmost to bottommost height. The draw command specifies its center.




define name triangle x0 y0 x1 y1 x2 y2




A triangle is just another name for a polygon.




define name equilateral width




An equilateral triangle has a horizontal base (two points have the same y-value). The apex has a higher y-value. The constructor just uses the constructor for a triangle.




border color thickness




Specifies the thickness in pixels of the border surrounding the selected object, and its color. Defaults : red, 4.




moveby pixels




The move parameter indicates how many pixels an object moves when directed by one keystroke. Default : 4.




draw color name xcenter ycenter




A geometrical object (an ellipse or a polygon) is drawn with the center at the coördinates (x, y), using the color specified. A text object is drawn using (x, y) as the coördinate of the left end of the string at the baseline.




KEYBOARD INPUT




Once the input file is finished, the keyboard is used to command the move-ments of the objects. The following keystrokes control the program :




Quit (exit the program).
Move the selected object left.
jMove the selected object down.

kMove the selected object up.

lMove the selected object right.

nSet the selection to the next object.

pSet the selection to the previous object.

0 ... 9 Set the selection to objects 0 through 9, respectively.




An object is always displayed using the coördinates of the center. If an object is moved off the window, it appears at the other end of the window. That is, if the x or y coördinate exceeds the width (height) of the windor, it is set to 0. If it becomes negative, it is set to the width (height). The selected object is always surrounded by a border to make it visible. For objects 0 through 9, the object’s number is displayed in the center of the object.










EXIT STATUS




No errors were detected.



Errors were detected and messages printed to the standard error.



Code



OpenGL and GLUT will be used to display the window. See the short example pro-grams in the misc/ subdirectory. Starter code is in the code/ subdirectory. For docu-mentation, Google using the terms ‘‘OpenGL’’ and/or ‘‘GLUT’’ and the name of the function, then look for results naming the web pages in




www.opengl.org/documentation




Following are some functions you might need :




glBegin




glClear




glClearColor




glColor3ub




glColor3ubv




glEnable




glEnd




glFlush




glHint




glLineWidth




glLoadIdentity




glMatrixMode




glOrtho




glPointSize




glPopMatrix




glPushMatrix




glRasterPos2f




glRasterPos2i




glRotatef




glTranslatef




glVertex2f




glViewport




gluOrtho2D




glutAddMenuEntry




glutAddSubMenu




glutAttachMenu




glutBitmapCharacter




glutBitmapHeight




glutBitmapLength




glutBitmapString




glutCloseFunc




glutCreateMenu




glutCreateWindow




glutDisplayFunc




glutEntryFunc




glutInit










glutInitDisplayMode




glutInitWindowPosition




glutInitWindowSize




glutKeyboardFunc




glutKeyboardUpFunc




glutMainLoop




glutMotionFunc




glutMouseFunc




glutPassiveMotionFunc




glutPostRedisplay




glutReshapeFunc




glutSetIconTitle




glutSetWindowTitle




glutSpecialFunc




glutSpecialUpFunc




glutSwapBuffers




glutTimerFunc




glutWireTeapot




4. What to Submit




Submit all C++ source files and the Makefile. If you are doing pair programming, also submit the PARTNER file.

More products