CAP 4703 Computer Graphic Methods - PowerPoint PPT Presentation

About This Presentation
Title:

CAP 4703 Computer Graphic Methods

Description:

Control communicate with window system. Inquiry get display information: size, ... could sleep program to keep window open but this is limited solution ... – PowerPoint PPT presentation

Number of Views:53
Avg rating:3.0/5.0
Slides: 56
Provided by: roybl
Learn more at: https://www.cse.fau.edu
Category:

less

Transcript and Presenter's Notes

Title: CAP 4703 Computer Graphic Methods


1
CAP 4703Computer Graphic Methods
  • Prof. Roy Levow
  • Lecture 2

2
2-Dimensional Drawingwith OpenGL
  • Two-dimensional objects are a special case of
    three-dimensional figures
  • The drawing is limited (by the programmer) to a
    plane
  • Viewing is normally an orthogonal view,
    perpendicular to the drawing plane

3
Sierpinski Gasket
  • A simple but interesting example
  • Start with any triangle
  • Pick an internal point at random
  • Pick a vertex at random
  • Find the midpoint between 1 and 2
  • Display this point
  • Replace initial point with this one
  • Repeat from step 2

4
Sierpinski Gasket Construction
5
OpenGL Program forSierpinski Gasket
  • main()
  • initialize_the_system()
  • for (some_number_of_points)
  • pt generate_a_point()
  • display_the_point(pt)
  • cleanup()
  • return 0

6
Points or Vertices
  • Points are represented by vectors with an entry
    for each coordinate
  • p (x, y, z) in 3 dimensions
  • p (x, y, 0) gives 2 dimensions by always
    setting z to 0
  • OpenGL allows up to 4 dimensions
  • Internal representation is always the same

7
OpenGL Vertices
  • Vertex creating functions have general name
  • glVertex
  • The suffix is 2 or 3 characters
  • Number of dimensions 2, 3, or 4
  • Data type i integer, f float,
  • d double
  • Optional v if pointer

8
Underlying Representation
  • OpenGL data types are defined in header file
  • define GLfloat float
  • so a header might look like
  • glVertex2i(GLint xi, GLint yi)
  • or
  • glVertex3f(GLfloat xf, GLfloat yf,
  • GLfloat zf)

9
Representation (cont.)
  • For the vector form
  • GLfloat vertex3
  • and then use
  • glVertex3fv(vertex)

10
Defining Geometric Objects
  • Objects are defined by collections of point
    constructors bounded by calls to glBegin and
    glEnd
  • A line is defined by
  • glBegin(GL_LINES)
  • glVertex2f(x1, y1)
  • glVertex2f(x2, y2)
  • glEnd()

11
OpenGL Code for Sierpinski Gasket
  • See p. 41 of text
  • Code leaves many open questions by using default
    values
  • colors
  • image position
  • size
  • clipping?
  • persistence

12
A Resulting Image
13
Coordinate System
  • Early systems depended on specific device mapping
  • Device-independent graphics broke link
  • Use application or problem coordinate system to
    define image
  • Use device coordinates, raster coordinates,
    screen coordinates for device

14
Coordinates
  • Application coordinates can be integer or real
    and multi-dimensional
  • Screen or raster coordinates are always integer
    and essentially 2-dimensional
  • Graphics program maps application coordinates
    onto device coordinates

15
App to Device Mapping
16
Classes for OpenGL Functions
  1. Primitives draw points, line segments,
    polygons, text, curves, surfaces
  2. Attributes specify display characteristics of
    objects color, fill, line width, font
  3. Viewing determine aspects of view position and
    angle of camera, view port size,

17
Function Classes (cont)
  • Transformations change appearance or
    characteristics of objects rotate, scale,
    translate
  • Input handle keyboard, mouse, etc.
  • Control communicate with window system
  • Inquiry get display information size, raster
    value,

18
OpenGL Interface
  • Graphics Utility Interface (GLU)
  • Creates common objects like spheres
  • GL Utility Toolkit (GLUT)
  • Provides generic interface to window system
  • GLX for Unix/Linux and
  • wgl for Microsoft Windows
  • provide low-level glue to window system

19
Library Organization
20
Using Libraries
  • Header files
  • include ltGL/glut.hgt
  • include ltGL/gl.hgt
  • include ltGL/glu.hgt
  • On some systems the GL/ is not used

21
Primitives
  • OpenGL supports both geometric primitives and
    raster primitives

22
Geometric Primitives
  • Points GL_POINTS
  • vertex displayed with size gt 1 pixel
  • Line segments GL_LINES
  • defined by pairs of vertices as endpoints of
    segments
  • Polygons GL_LINE_STRIPE or GL_LINE_LOOP
  • Loop is closed, stripe is not

23
Primitive Examples
24
Properties of Polygons
  • Defined by line loop border
  • Simple if no edges cross
  • Convex if every line segment connecting pair of
    points on boundary or inside lies completely
    inside

25
Polygon Types in OpenGL
  • Polygons are either filled regions (default) or
    boundaries
  • Set with glPolygonMode
  • To get polygon with boundary must draw twice,
    once as filled and once as boundary or line loop

26
Special Polygons
  • GL_TRIANGLES, GL_QUADS
  • Groups of 3 or 4 points are grouped as triangles
    or quadrilaterals

27
Special Polygons
  • GL_TRIANGLE_STRIPE, GL_QUAD_STRIPE,
    GL_TRIANGEL_FAN
  • Contiguous stripe or fan of triangles or
    quadrilaterals

28
Drawing a Sphere
  • Draw great circles
  • Fill between latitudes with quad strips
  • Fill caps with triangle fans
  • Code on p.52

29
Text
  • May be raster from bit map
  • Fast
  • Does not scale well
  • Poor in rotation other than 90o
  • Vector from drawn curves
  • Slow to draw
  • Scales, rotates, etc. well

30
Raster text
31
Color
  • The physiology of vision leads to 3-color theory
  • Any color can be produced by a combination of
    red, green, and blue at intensities that produce
    the same response in the cones as the true color

32
Colors in OpenGL
  • Colors are stored using 4 attributes, RGBA
  • A Alpha channel
  • Controls opacity or transparency
  • Color values can be integers in range from 0 to
    max component value
  • 0 255 for 24-bit color
  • Real numbers between 0.0 and 1.0

33
Colors in OpenGL (cont)
  • Colors are set with glColor functions
  • is two characters, nt
  • n 3 or 4 color values
  • t date type i, f, etc.

34
Clearing Frame Buffer
  • To get predictable results a program must first
    clear the frame buffer
  • glClearColor(1.0, 1.0, 1.0, 1.0)
  • sets color to white

35
Indexed Color
  • OpenGL also supports indexed color
  • Saves space when only a limited number of
    distince colors are used

36
Indexed Color (cont)
  • Set color in table with
  • glutSetColor(int color, GLfloat red,
  • GLfloat blue, GLfloat green)
  • Access color in table with
  • glIndexi(element)

37
Viewing
  • Based on synthetic camera model
  • If nothing is specified, there are default
    viewing parameters
  • Rarely used
  • Would force us to fit model world to camera
  • Prefer flexibility of setting viewing parameters

38
Two-Dimensional Viewing
  • Selected rectangle from 2-dimensional world is
    displayed
  • Called viewing rectangle or clipping rectangle

39
Viewing Volume
  • 2-dimensional viewing is special case of
    3-dimensional viewing
  • viewing volume
  • Default is
  • 2 x 2 x 2
  • cube centered
  • at (0,0,0)

40
Orthographic Projection
  • Projects point (x,y,z) onto (x,y,0)
  • View is perpendicular to plane x0
  • Set viewing rectagle with
  • void glOrtho(GLdouble left,
  • GLdouble right,
  • GLdouble bottom,
  • GLdouble top)

41
Matrix Modes
  • Graphic pipelines perform matrix transformations
    on images at each stage
  • Most important matrices are
  • model-view
  • projection
  • State includes both

42
Manipulating Mode Matrices
  • Matrix mode operations operate on matrix for
    currently selected mode
  • Model-view is default
  • Mode is set with
  • glMatrixMode(mode)
  • mode GL_PROJECTION, GL_MODELVIEW, etc.
  • Always return to model-view to insure consistency

43
Control Functions
  • Depend on particular window system
  • GLUT provides standard set of basic operations
  • We will consider only these

44
Window Control
  • Operations only on display window for the program
  • Initialization glutInit
  • Creation glutCreateWindow
  • Display mode glutInitDisplayMode
  • RGB or indexed
  • hidden-surface removal
  • singer or double buffering

45
Example Code
  • glutInit(argc, argv)
  • glutInitDisplayMode(GLUT_DOUBLE GLUT_RGB
    GLUT_DEPTH)
  • glutInitWindowSize(480, 480)
  • glutWindowPosition(0, 0)
  • glutCreateWindow(sample")

46
Aspect Ratio and Viewports
  • Ratio of width to length is aspect ratio
  • If aspect ratio of viewing rectangle and window
    differ, image will be stretched and distorted
  • Viewport defines region of screen in which to
    display image
  • Can eliminate distortion

47
Distortion
48
Viewport
  • Set viewport with
  • void glViewport(GLint x, GLint y,
  • GLsizei w, GLsizei h)

49
GLUT Main Loop
  • If we simply run an OpenGL program it will
    display the image and exit
  • may not allow time to see it
  • could sleep program to keep window open but this
    is limited solution
  • GLUT provides controls to avoid this
  • Keep program running waiting for event
  • void glutMainLoop(void)

50
Glut Display
  • To display an image, code a function to create
    the image and have GLUT call it
  • image drawing function takes no arguments and
    returns no result
  • Any parameters must be passed through global
    variables
  • void glutDisplayFunc(void (func)(void))

51
Simple Main Program
  • include ltGL/glut.hgt
  • void main(int argc, char argv)
  • glutInit(argc, argv)
  • glutInitDisplayMode
  • (GLUT_SINGLE GLUT_RGB)
  • glutInitWindowSize(500, 500)
  • glutWindowPosition(0, 0)

52
Simple Main Program (cont)
  • glutCreateWindow(My Image")
  • glutDisplayFunc(display)
  • myinit()
  • glutMainLoop()

53
Program Structure
  • Key components
  • initialization
  • display callback function
  • main
  • Gasket Program
  • ..\code\gasket.c 2-d
  • ..\code\gasket2.c 3-d with colors
  • ../code/gasket3.c 3-d with polygons

54
Hidden Surface Removal
  • Z-buffer algorithm
  • Z coordinate determines depth
  • Point nearer camera obscures one with greater
    depth
  • Steps
  • Init with GLUT_DEPTH
  • glEnable(GL_DEPTH_TEST
  • can also disable
  • clear before redrawing

55
Sample HSR Program
  • void display()
  • glClear(GL_COLOR_BUFFER_BIT
  • GL_DEPTH_BUFFER_BIT)
  • tetrahedron(n)
  • glFlush()
Write a Comment
User Comments (0)
About PowerShow.com