Implementation I I

advertisement
COMPUTER
G RAPH I C S
Computer Graphics
Implementation II
Guoying Zhao
1 / 50
COMPUTER
G RAPH I C S
• Polygon Filling
– Scan-line Conversion Approaches
– Area Filling Approaches
• Antialiasing
• Clipping
Guoying Zhao
2 / 50
COMPUTER
G RAPH I C S
Polygon Filling
• Scan-line Conversion
• Area Filling
Guoying Zhao
3 / 50
COMPUTER
G RAPH I C S
Polygon Filling
• Vertex-edge representation  Pixel set
representation
P0
P4
P2
P3
P1
P6
P5
P7
Guoying Zhao
4 / 50
COMPUTER
G RAPH I C S
Scan-line Conversion
P0
P4
P2
P3
P1
P6
P5
P7
Check pixel by pixel
Guoying Zhao
5 / 50
COMPUTER
G RAPH I C S
How to judge a point inside or outside a polygon?
• Shoot a radial from the point to intersect with the polygon edges; if
there are odd number of intersection points, the point is inside the
polygon; if even number, outside.
• Odd point: the intersection point is polygon’s vertex (special case).
Guoying Zhao
6 / 50
COMPUTER
G RAPH I C S
Scan-line Conversion
P0
P4
P2
P3
P1
P6
P5
P7
Improved (limit the pixel sets into the
bounding box of the polygon for speeding up)
Guoying Zhao
7 / 50
COMPUTER
G RAPH I C S
Scan-line Conversion
• Scan-line polygon-fill algorithm
– Taking full advantage of the coherence
properties of pixels
– Three coherence properties
• Area coherence
• Scan-line coherence
• Edge coherence
Guoying Zhao
8 / 50
COMPUTER
G RAPH I C S
Area Coherence
The screen region between two scan-lines is partitioned into some
trapezoids by the polygon.
(1) Two types of trapezoid: the one inside the polygon and the one
outside polygon.
(2) The two types of trapezoids are arranged alternately.
Guoying Zhao
9 / 50
COMPUTER
G RAPH I C S
Scan-line Coherence
Suppose the intersection points of
scan-line y=e and polygon edge ei
(Pi-1Pi) is xei.
Suppose the intersection points
sequence arranged by the xincrease is xei1, xei2, xei3 … xein.
According to area coherence, we
can get:
(1) n is even number
(2) On the scan-line, only the segments (xeik, xeik+1),
k=1,3,5,…n–1) are inside the polygon.
Scan-line coherence is the reflection of area coherence on a
scan-line.
Guoying Zhao
10 / 50
COMPUTER
G RAPH I C S
Edge Coherence
Suppose the intersection point
sequence on y=e is xei1, xei2, …xein;
point sequence on y=e-1 is xdi1,
xdi2, … xdin.
If edge er(Pr-1Pr) intersects with both
y=e and y=e-1; the corresponding
points xer and xdr have following
relationship: xer = xdr + 1/mr
(1)
Thus, we can calculate the intersection points on y=e from the
points on y=e-1:
Edge coherence is the reflection of area coherence on edges.
Guoying Zhao
11 / 50
COMPUTER
G RAPH I C S
Polygon Filling
• Scan-line Conversion
• Area Filling
Guoying Zhao
12 / 50
COMPUTER
G RAPH I C S
Area Filling
• Area Filling: To start from a given interior position
(seed) and paint outward from this point until we
encounter the specified boundary conditions.
• The “area” should be identified with its interior color or
boundary color.
– Colorate all the interior pixels to a specified color
– Colorate all the boundary pixels to the boundary color
Guoying Zhao
13 / 50
COMPUTER
G RAPH I C S
种子填充
Two kinds of connectivity
4-connected
Neighbourhood
8-connected
Neighbourhood
Guoying Zhao
14 / 50
COMPUTER
G RAPH I C S
4-connected area and 8-connected area
• 4-connected area: Giving any two interior points A and B, we
can travel from A to B by the 4-directions moving: right, left, up
and down moving.
• To filling the 4-connected area, we only need to test its 4direction neighbors
4-connected area
Guoying Zhao
15 / 50
8-connected area
COMPUTER
G RAPH I C S
4-connected area and 8-connected area
• The boundary of 4connected area is 8connected
• The boundary of 8connected area must
be 4-connected
Guoying Zhao
16 / 50
COMPUTER
G RAPH I C S
Recursive Method for Filling a 4-connected Area
The area is identified by the boundary color
void AreaFill4(int x, int y, int fillCol, int boundaryCol)
{
int currentCol = getPixel(x,y);
if( (currentCol != boundaryCol)&& (currentCol != fillCol))
{
setPixel(x, y, fillCol);
AreaFill4(x, y+1, fillCol, boundaryCol);
AreaFill4(x, y-1, fillCol, boundaryCol);
AreaFill4(x-1, y, fillCol, boundaryCol);
AreaFill4(x+1, y, fillCol, boundaryCol);
}
}
Guoying Zhao
17 / 50
COMPUTER
G RAPH I C S
Recursive Method for Filling a 4-connected Area
The area is identified by the interior color. Called floodfill algorithm
void FloodFill4(int x, int y, int fillCol, int interiorCol)
{
int currentCol = getPixel(x,y);
if( currentCol == interiorCol )
{
setPixel(x, y, fillCol);
FloodFill4(x, y+1, fillCol, interiorCol);
FloodFill4(x, y-1, fillCol, interiorCol);
FloodFill4(x-1, y, fillCol, interiorCol);
FloodFill4(x+1, y, fillCol, interiorCol);
}
}
Guoying Zhao
18 / 50
COMPUTER
G RAPH I C S
Recursive Method for Filling a 4-connected Area
Guoying Zhao
G
F
H
E
D A
L
O
I
J
C B
K
P
M N
19 / 50
COMPUTER
G RAPH I C S
Recursive Method for Filling a 4-connected Area
Left pixel to 3 is the last one to be filled.
Guoying Zhao
20 / 50
COMPUTER
G RAPH I C S
How to expand the algorithm for 4 –connected area to the
algorithm for 8-connect area?
Guoying Zhao
21 / 50
COMPUTER
G RAPH I C S
void AreaFill8(int x, int y, int fillCol, int boundaryCol) {
int currentCol = getPixel(x,y);
if((currentCol != boundaryCol) && (currentCol != fillCol))
{
setPixel(x, y, fillCol);
AreaFill8(x, y+1, fillCol, boundaryCol);
AreaFill8(x, y-1, fillCol, boundaryCol);
AreaFill8(x-1, y, fillCol, boundaryCol);
AreaFill8(x+1, y, fillCol, boundaryCol);
AreaFill8(x+1, y+1, fillCol, boundaryCol);
AreaFill8(x+1, y-1, fillCol, boundaryCol);
AreaFill8(x-1, y+1, fillCol, boundaryCol);
AreaFill8(x-1, y-1, fillCol, boundaryCol);
}
}
Guoying Zhao
22 / 50
COMPUTER
G RAPH I C S
Comparison Between Scan-line Conversion (A) and
Area Filling (B)
•
Basic idea: A changes the edge list representation into lattice
representation. It uses the coherences of polygons. B does not change
the representation of the area, but the color. It uses the connectivity of
area.
•
The requirements: For area filling, a seed point inside the area is
needed.
•
Boundary: For A, the number of the intersection points of each scan
line with edges should be even. For B, the boundary of 4-connected
area is closed 8-connected area and the boundary of 8-connected area
is closed 4-connected area.
Guoying Zhao
23 / 50
COMPUTER
G RAPH I C S
Antialiasing
• Aliasing Problems of Raster Graphics
• Antialiasing Methods
Guoying Zhao
24 / 50
COMPUTER
G RAPH I C S
Aliasing Problems of Raster Graphics
• What’s aliasing?
The distortion of information due to lowfrequency sampling ( undersampling ) is
called aliasing
Guoying Zhao
25 / 50
COMPUTER
G RAPH I C S
Aliasing Problems of Raster Graphics --- Jagged
Boundaries
y
9
8
7
6
5
4
3
2
1
0
Guoying Zhao
26 / 50
x
0
1
2
3
4
5
6
7
8
9
COMPUTER
G RAPH I C S
Aliasing Problems of Raster Graphics --- Shape
Distortion
Slim Primitives are lost
Guoying Zhao
27 / 50
COMPUTER
G RAPH I C S
Aliasing Problems of Raster Graphics --- Sparking
The slim primitive
sparks when it is moved
Guoying Zhao
28 / 50
COMPUTER
G RAPH I C S
Antialiasing
• Aliasing Problems of Raster Graphics
• Antialiasing Methods
Guoying Zhao
29 / 50
COMPUTER
G RAPH I C S
Antialiasing Methods
• Adopting area-sampling instead of
point-sampling
• Supersampling
Guoying Zhao
30 / 50
COMPUTER
G RAPH I C S
Area-sampling
Using transitional color scales on the edges
Guoying Zhao
31 / 50
COMPUTER
G RAPH I C S
Using Transitional Color Scales on the Edges
Guoying Zhao
32 / 50
COMPUTER
G RAPH I C S
Area-sampling
• Exact area-sampling is time-consuming
• Some approximate algorithms are always used
– Wu’s algorithm for drawing antialiasing lines
– Pitteway and Watkinson’s algorithm for drawing
antialiasing polygons
Guoying Zhao
33 / 50
COMPUTER
G RAPH I C S
Supersampling for Antialiasing
• Hardware method: adopting high resolution raster
display
• Software method: sampling objects at a high
resolution and displaying the results at a lower
resolution
– High resolution sampling: partition each pixel as
several sub-pixels, such as the 3*3 partition. Then
compute color for all the sub-pixels
– Low resolution display: compute the pixel’s color by
adding up all its sub-pixels’ color with a weighting mask
Guoying Zhao
34 / 50
COMPUTER
G RAPH I C S
Supersampling for Antialiasing
A B C
D E F
G H I
1 2 1
2 4 2
1 2 1
Weight mask for the
3*3 partition
3*3 partition
Pixel color = (ColA + 2*ColB + ColC + 2*ColD +
4*ColE + 2*ColF + ColG + 2*ColH + ColI ) / 16
Guoying Zhao
35 / 50
COMPUTER
G RAPH I C S
Supersampling for Antialiasing
1
2
3
4
3
2
1
2
4
6
8
6
4
2
3 4
6 8
9 12
12 16
9 12
6 8
3 4
3
6
9
12
9
6
3
2
4
6
8
6
4
2
1
2
3
4
3
2
1
Weight mask for the 7*7 partition
Guoying Zhao
36 / 50
COMPUTER
G RAPH I C S
Clipping
Guoying Zhao
37 / 50
COMPUTER
G RAPH I C S
Clipping
Guoying Zhao
38 / 50
COMPUTER
G RAPH I C S
Line Clipping
•
Clipping endpoints
(Xmax , Ymax)
(Xmin , Ymin)
xmin < x < xmax and ymin < y < ymax
•
Endpoint analysis for lines:
–
–
–
•
if both endpoints in , do “trivial acceptance”
if one endpoint inside, one outside, must clip
if both endpoints out, don’t know
Brute force clip: solve simultaneous equations using y = mx + b for line and four clip
edges
–
–
Guoying Zhao
point inside
slope-intercept formula handles infinite lines only
doesn’t handle vertical lines
39 / 50
COMPUTER
G RAPH I C S
Parametric Line Formulation For Clipping
• Parametric form for line segment
X = x0 + t(x1 – x0)
0<t<1
Y = y0 + t(y1 – y0)
P(t) = P0 + t(P1 – P0)
•
Guoying Zhao
“true,” i.e., interior intersection, if sedge and tline in [0,1]
40 / 50
COMPUTER
G RAPH I C S
Outcodes for Cohen-Sutherland Line Clipping in 2D
•
•
Divide plane into 9 regions
Compute the sign bit of 4 comparisons between a vertex and an edge
–
–
ymax – y; y – ymin; xmax – x; x - xmin
point lies inside only if all four sign bits are 0, otherwise exceeds edge
Clip Rectangle
•
4 bit outcode records results of four bounds tests:
First bit:
outside halfplane of top edge, above top edge
Second bit: outside halfplane of bottom edge, below bottom edge
Third bit: outside halfplane of right edge, to right of right edge
Fourth bit: outside halfplane of left edge, to left of left edge
o1=o2 =0, accept; AND(o1, o2) <>0, discard.
Guoying Zhao
41 / 50
COMPUTER
G RAPH I C S
Outcodes for Cohen-Sutherland Line Clipping in 3D
•
•
•
Very similar to 2D
Divide volume into 27 regions (Picture a Rubik’s cube)
6-bit outcode records results of 6 bounds tests
Top plane
Bottom plane
Front plane
001000 (above)
000000 (above)
010000 (in front)
000000 (below)
000100 (below)
000000 (behind)
Left plane
000001 (to left of)
000000 (to right of)
First bit:
Second bit:
Third bit:
Fourth bit:
Fifth bit:
Sixth bit:
Guoying Zhao
Back plane
Right plane
000000 (in front)
000000 (to left of)
100000 (behind)
000010 (to right of)
outside back plane, behind back plane
outside front plane, in front of front plane
outside top plane, above top plane
outside bottom plane, below bottom plane
outside right plane, to right of right plane
outside left plane, to left of left plane
42 / 50
COMPUTER
•
•
G RAPH I C S
Cohen-Sutherland Algorithm
If we can neither trivially reject/accept, divide and conquer
subdivide line into two segments; then T/A or T/R one or both segments:
D
C
I
B
A
Clip
rectangle
E
H
G
F
– use a clip edge to cut line
– use outcodes to choose edge that is crossed
• Edges where the two outcodes differ at that particular bit are crossed
– pick an order for checking edges
• top – bottom – right – left
– compute the intersection point
• the clip edge fixes either x or y
• can substitute into the line equation
– iterate for the newly shortened line
– “extra” clips may happen (e.g., E-I at H)
Guoying Zhao
43 / 50
COMPUTER
G RAPH I C S
Pseudocode for the Cohen- Sutherland Algorithm
• y = y0 + slope*(x - x0) and x = x0 + (1/slope)*(y - y0)
ComputeOutCode(x0, y0, outcode0)
ComputeOutCode(x1, y1, outcode1)
repeat
check for trivial reject or trivial accept
pick the point that is outside the clip rectangle
if TOP then
x = x0 + (x1 – x0) * (ymax – y0)/(y1 – y0); y = ymax;
else if BOTTOM then
x = x0 + (x1 – x0) * (ymin – y0)/(y1 – y0); y = ymin;
else if RIGHT then
y = y0 + (y1 – y0) * (xmax – x0)/(x1 – x0); x = xmax;
else if LEFT then
y = y0 + (y1 – y0) * (xmin – x0)/(x1 – x0); x = xmin;
if (x0, y0 is the outer point) then
x0 = x; y0 = y; ComputeOutCode(x0, y0, outcode0)
else
x1 = x; y1 = y; ComputeOutCode(x1, y1, outcode1)
until done
Guoying Zhao
44 / 50
COMPUTER
G RAPH I C S
Cyrus-Beck/Liang-Barsky Parametric Line Clipping-1
•
•
Use parametric line formulation
P(t) = P0 + (P1 – P0)t
Determine where the line intersects the infinite line formed by each edge by
solving for t 4 times. Decide which of these intersections actually occur on
the rectangle
•
For any point PEi on edge Ei
Guoying Zhao
45 / 50
COMPUTER
G RAPH I C S
C-B/L-B Param. Line Clipping-2
Now solve for the value of t at the intersection of P0 P1 with the edge Ei:
Ni • [P(t) – PEi] = 0
First, substitute for P(t):
Ni • [P0 + (P1 – P0)t – PEi] = 0
Next, group terms and distribute dot product:
Ni • [P0 – PEi] + Ni • [P1 – P0]t = 0
Let D be the vector from P0 to P1 = (P1 – P0), and solve for t:
Note that this gives a valid value of t only if the denominator of the expression is nonzero.
t
N [P  P ]
i
0
Ei
N D
i
For this to be true, it must be the case that:
Ni  0 (that is, the normal should not be 0;
this could occur only as a mistake)
D  0 (that is, P1  P0)
Ni • D  0 (edge Ei and line D are not parallel; if they are, no intersection).
The algorithm checks these conditions.
Guoying Zhao
46 / 50
COMPUTER
G RAPH I C S
C-B/L-B Param. Line Clipping-3
•
Eliminate t’s outside [0,1] on the line
•
Which remaining t’s produce interior intersections?
•
Can’t just take the innermost t values!
•
Move from P0 to P1; for a given edge, just before crossing:
•
if Ni • D < 0
•
Pick inner PE, PL pair: tE for PPE with max t, tL for PPL with min t, and tE > 0, tL < 1.
•
If tL < tE, no intersection
Guoying Zhao
Potentially Entering (PE), if Ni • D > 0
47 / 50
Potentially Leaving (PL)
COMPUTER
G RAPH I C S
Pseudocode for Cyrus-Beck/ Liang-Barsky Line Clipping
Algorithm
Pre-calculate Ni and select PEi for each edge;
for each line segment to be clipped
if P1 = P0 then
line is degenerate so clip as a point;
else
begin
tE = 0; tL = 1;
for each candidate intersection with a clip edge
if Ni • D  0 then {Ignore edges parallel to line}
begin
calculate t; {of line and clip edge intersection}
use sign of Ni • D to categorize as PE or PL;
if PE then tE = max(tE,t);
if PL then tL = min(tL,t);
end
if tE > tL then
return nil
else
Guoying Zhao
return P(tE) and P(tL) as true clip intersections
end
48 / 50
COMPUTER
•
•
G RAPH I C S
D = P1 – P0 = (x1 – x0, y1 – y0)
Leave PEi as an arbitrary point on the clip edge; it’s a free variable and
drops out
Calculations for Parametric Line Clipping Algorithm
N  (P  P
)
i
0
Ei
N D
i
Clip Edgei
Normal Ni
P Ei
P0-PEi
left: x = xmin
(-1,0)
(xmin, y)
(x0- xmin,y0-y)
right: x = xmax
(1,0)
(xmax,y)
(x0- xmax,y0-y)
bottom: y = ymin
(0,-1)
(x, ymin)
(x0-x,y0- ymin)
(y  y
)
0
m in
(y  y )
1
0
top: y = ymax
(0,1)
(x, ymax)
(x0-x,y0- ymax)
(y  y
)
0
m ax
(y  y )
1
0
Guoying Zhao
49 / 50
t 
 (x  x
)
0
m in
(x  x )
1
0
 (x  x
)
0
m ax
(x  x )
1
0
COMPUTER
G RAPH I C S
Sutherland-Hodgman Polygon Clipping
Guoying Zhao
50 / 50
Download