output primitives jehee lee seoul national university

32
Output Primitives Jehee Lee Seoul National University

Upload: derrick-stanley

Post on 27-Dec-2015

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Output Primitives Jehee Lee Seoul National University

Output Primitives

Jehee Lee

Seoul National University

Page 2: Output Primitives Jehee Lee Seoul National University

OpenGL Programming

• OpenGL ( gl ) is a common graphics library which provides functions for drawings and interactive input.

• OpenGL is accessible via C or C++ programs• http://www.opengl.org

• OpenGL basic (core) library– Functions, symbols, and typesglBegin, glClear, glCopyPixels, glPolygonModeGL_2D, GL_RGB, GL_POLYGONGlbyte, Glshort, Glint, Glfloat, Gldouble

Page 3: Output Primitives Jehee Lee Seoul National University

Related Libraries

• OpenGL Utility (GLU)– Setting up viewing and projection matrices– Complex objects

• Line and polygon approximations• Displaying quadrics, B-splines

– Prefix glu

• OpenGL Utility Toolkit (GLUT)– Support any screen-windowing system

Page 4: Output Primitives Jehee Lee Seoul National University

An Example of Open GL

• Initialize OpenGL and GLUT• Initialize a drawing window• Draw a line segment

Page 5: Output Primitives Jehee Lee Seoul National University
Page 6: Output Primitives Jehee Lee Seoul National University

Output and Input Pipeline

• Scan conversion– converts primitives such as lines, circles, etc.

into pixel values– geometric description a finite scene area

• Clipping– the process of determining the portion of a

primitive lying within a region called clip region

Page 7: Output Primitives Jehee Lee Seoul National University

Output Pipeline

• Output pipeline (rendering process)– Application model : descriptions of objects

– Application program : generates a sequence of functions to display a model

– Graphics package : clipping, scan conversion, shading

– Display H/W

Page 8: Output Primitives Jehee Lee Seoul National University

Output Pipeline

Page 9: Output Primitives Jehee Lee Seoul National University

Input Pipeline

• Input pipeline– user interaction (e.g., mouse click)

– graphic package (by sampling or event-driven input functions)

– application program

– modify the model or the image on the screen

Page 10: Output Primitives Jehee Lee Seoul National University

Hardware vs Software Pipelines

• Displays with frame buffers only– scan conversion by a graphic package

• Displays with frame buffers and display controllers– common in plug-in graphics card– scan conversion by a graphic package and display

processor

Page 11: Output Primitives Jehee Lee Seoul National University

Scan conversion and Clipping

• Clipping before scan conversion – Eg) Lines, rectangles, and polygons (scissoring)

• Clipping after scan converting the entire collection of primitives into a temporary canvas– Eg) Text

window

Text can be

clipped

Page 12: Output Primitives Jehee Lee Seoul National University

Scan Converting Lines

A line from (x1,y1) to (x2,y2) a series of pixels

[Criteria]– uniform, user-selected density– straight lines should appear straight – line end-points should be constrained– line drawing algorithms should be fast

Page 13: Output Primitives Jehee Lee Seoul National University

Why Study Scan Conversion Algorithms?

Every high-end graphics card support this. You will never have to write these routines

yourself, unless you become a graphics hardware designer.

So why do we learn this stuff? Maybe you will become a graphics hardware designer But seriously, the same basic tricks underlie lots of

algorithms: 3-D shaded polygons, texture mapping

Page 14: Output Primitives Jehee Lee Seoul National University

Scan Converting Lines

• Digital Differential Analyzer(DDA)– Basic incremental algorithm – Each point is generated from the previous point

in a simple fashion– Slope of a line m = Δy/Δx

x

y

Page 15: Output Primitives Jehee Lee Seoul National University

Digital Differential Analyzer(DDA)

• Idea 1. Go to starting point2. Increment x and y values by constants

proportional to x and y such that one of them is 1.

3. Round to the closest raster position

• Drawbacks– rounding to an integer takes time– floating-point operations

Page 16: Output Primitives Jehee Lee Seoul National University

Digital Differential Analyzer(DDA)

Page 17: Output Primitives Jehee Lee Seoul National University

Midpoint Line Algorithm (Bresenham's Line Algorithm)

• Assume a line from (x0,y0) to (x1,y1) that 0<slope<1 and x0<x1

• Suppose that we have just finished drawing a pixel P = (xp, yp) and we are interested in figuring out which pixel to draw next.

Page 18: Output Primitives Jehee Lee Seoul National University

Midpoint Line Algorithm (Bresenham's Line Algorithm)

If distance(NE,Q) > distance(E,Q)

then select E = (xp+1, yp)

else select NE = (xp+1, yp+1)

NE

E

M

P

Q

Page 19: Output Primitives Jehee Lee Seoul National University

Midpoint Line Algorithm (Bresenham's Line Algorithm)

• A line eq. in the implicit form

F(x, y) = ax + by + c = 0

• Using y = (Δy/Δx)x + B,

where a = Δy, b = -Δx, c = B·Δx.

F(x,y) = Δy·x - Δx·y + B·Δx = 0

• Let's use an equivalent representation

F(x,y) = 2ax + 2by + 2c = 0.

Page 20: Output Primitives Jehee Lee Seoul National University

Midpoint Line Algorithm (Bresenham's Line Algorithm)

• Making slope assumptions, observe that b < 0, and this implies:– F(x,y) < 0 for points above the line – F(x,y) > 0 for points below the line

• To apply the midpoint criterion, we need only to compute F(M) = F(xp+1, yp+½) and to test its sign.

Page 21: Output Primitives Jehee Lee Seoul National University

Midpoint Line Algorithm (Bresenham's Line Algorithm)

• To determine which one to pick up, we define a decision variable

D = F(xp+1, yp+½)

D = 2a(xp+1) + 2b(yp+½) + 2c

= 2axp + 2byp + (2a + b + c)

• If D > 0 then M is below the line, so select NE, otherwise select E.

NE

E

M

P

Q

Page 22: Output Primitives Jehee Lee Seoul National University

Midpoint Line Algorithm (Bresenham's Line Algorithm)

• How to compute D incrementally?– Suppose we know the current D value, and we want to

determine the next D.

– If we decide on going to E next, • Dnew = F(xp + 2, yp + ½)

= 2a(xp + 2) + 2b(yp + ½) + c = D + 2a = D + 2Δy

– If we decide on going to NE next, • Dnew = F(xp + 2, yp + 1 + ½)

= 2a(xp + 2) + 2b(yp + 1 + ½) + c = D + 2(a + b) = D + 2(Δy - Δx).

Page 23: Output Primitives Jehee Lee Seoul National University

Midpoint Line Algorithm (Bresenham's Line Algorithm)

• Since we start at (x0,y0), the initial value of D can be calculated byDinit = F(x0 + 1, y0 + ½)

= (2ax0 + 2by0 + c) + (2a + b) = 0 + 2a + b = 2Δy - Δx

• Advantages– need to add integers and multiply by 2

(which can be done by shift operations)– incremental algorithm

Page 24: Output Primitives Jehee Lee Seoul National University

Line end points: (x0,y0) = (5,8);

(x1,y1) = (9,11) • Δx = 4; Δy = 3• Dinit = 2Δy – Δx = 2 > 0

select NE• Dnew = D + 2(Δy - Δx) = 0

Select E• Dnew = D + 2Δy = 0 + 6 =

6Select NE

Midpoint Line Algorithm- Example

4 5 6 7 8 9 10 11

13 1

2 1

1 1

0 9

8 7

6

Page 25: Output Primitives Jehee Lee Seoul National University

Scan Converting Lines (issues)

• Endpoint order– S01 is a set of pixels that lie on the line from P0 to P1

– S10 is a set of pixels that lie on the line from P1 to P0

S01 should be the same as S10

• Varying intensity of a line as a function of slope– For the diagonal line, it is longer than the horizontal

line but has the same number of pixels as the latter needs antialiasing

• Outline primitives composed of lines – Care must be taken to draw shared vertices of

polylines only once

Page 26: Output Primitives Jehee Lee Seoul National University

Scan Converting Lines (issues)

• Starting at the edge of a clip rectangle– Starting point is not the intersection point of

the line with clipping edge Clipped line may have a different slope

Page 27: Output Primitives Jehee Lee Seoul National University

Scan Converting Circles

• Eight-way symmetry

We only consider 45° of a circle

Page 28: Output Primitives Jehee Lee Seoul National University

Midpoint Circle Algorithm

• Suppose that we have just finished drawing a pixel (xp, yp) and we are interested in figuring out which pixel to draw next.

Page 29: Output Primitives Jehee Lee Seoul National University

Midpoint Circle Algorithm

• F(x,y) = x2 + y2 - R2 = 0 on the circle > 0 outside the circle < 0 inside the circle

• If F(midpoint between E and SE) > 0 then

select SE = (xp+1,yp-1)

else select E = (xp+1, yp);

Page 30: Output Primitives Jehee Lee Seoul National University

Midpoint Circle Algorithm

• Decision variable dold = F(xp+1, yp-½)

= (xp+1)2 + (yp-½)2 - R2

– If dold < 0, select E.

dnew = F(xp+2, yp-½) = dold + (2xp + 3)

– If dold 0, select SE.

dnew = F(xp+2, yp-½-1) = dold + (2xp - 2yp + 5)

• We have to calculate new d based on the point of evaluation P=(xp, yp), but this is not expensive

computationally.

Page 31: Output Primitives Jehee Lee Seoul National University

Midpoint Circle Algorithm

• Since we start at (0,R), the initial value of d can be calculated bydinit = F(1, R - ½)

= 5/4 – R

• By substituting d - 1/4 by h, we can get the integer midpoint circle scan-conversion algorithm.

Page 32: Output Primitives Jehee Lee Seoul National University

Scan Converting Ellipses

• F(x,y) = b2x2 + a2y2 -a2b2 • Divide the quadrant into two regions; the

boundary of two regions is the point at which the curve has a slope of -1.

• And then apply any midpoint algorithm.