cs452 | computer graphics - washington … | computer graphics courtesy of andries van damscan...
TRANSCRIPT
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©
Scan ConversionCS452
1
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13
} EnrollyourselftoPiazza} Assignment0willbeduenextMonday} Testuploadingadummyfilenow} VisualStudioversion(onlyVS2013?NoVS2015)
} Officehourslocation(conferenceroominJolleyoruniversitylabs)?} Officehours(differenttime?)
2
Logistics
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©
Scan ConversionCS452
3
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13
} Point} Line} Circle} Ellipse} …} Woody
4
What is the simplest possible thing to draw?
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©
LineDrawing} Firstproblemstatement:Drawalineonarasterscreenbetweentwopoints
5
Scan Converting Lines
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 6
Raster Screen
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©
LineDrawing} Firstproblemstatement:Drawalineonarasterscreenbetweentwopoints
} Whyisthisadifficultproblem?} Whatis“drawing”onarasterdisplay?} Whatisa“line”inrasterworld?} Efficiencyandappearancearebothimportant
7
Scan Converting Lines
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©
LineDrawing} Firstproblemstatement:Drawalineonarasterscreenbetweentwopoints
} Whyisthisadifficultproblem?} Whatis“drawing”onarasterdisplay?} Whatisa“line”inrasterworld?} Efficiencyandappearancearebothimportant
ProblemStatement} GiventwopointsPandQinXYplane(integercoordinates),} determinewhichpixelsshouldbeon} tobestapproximateaunit-widthlinesegmentfromPtoQ.
8
Scan Converting Lines
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©
Specialcases:} HorizontalLine:
} DrawpixelPandincrementxcoordinatevalueby1togetnextpixel.} VerticalLine:
} DrawpixelPandincrementycoordinatevalueby1togetnextpixel.} DiagonalLine:
} DrawpixelPandincrementbothxandycoordinateby1togetnextpixel.} Whatshouldwedoingeneralcase?
} Forslope<=1,incrementxcoordinateby1andchoosepixelonorclosesttoline.Slopesinotheroctantsbyreflection(e.g.,insecondoctant,incrementY)
} Buthowdowemeasure“closest”?
9
Scan-converting a Line: Finding the next pixel:
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 10
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 11
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam© 12
Strategy 1 – Incremental Algorithm (3/3) - issuesvoidLine(intx0,inty0,intx1,inty1){intx,y;floatdy=y1–y0;floatdx=x1–x0;floatm=dy/dx;
y=y0;for(x=x0;x<x1;++x){ WritePixel(x,Round(y)); y=y+m;}}
Roundingtakestime
Sinceslopeisfractional,needspecialcaseforverticallines(dx=0)
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 13
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 14
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 15
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 16
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 17
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 18
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 19
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 20
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 21
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13
voidMidpointLine(intx0,inty0,intx1,inty1){intdx=(x1-x0),dy=(y1-y0);intd=2*dy-dx;intincrE=2*dy;intincrNE=2*(dy-dx);intx=x0,y=y0;WritePixel(x,y);
while(x<x1){if(d<=0)d=d+incrE;//EastCaseelse{d=d+incrNE;++y;}//NortheastCase++x;WritePixel(x,y);} }
22
Example Code
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 23
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 24
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 25
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 26
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 27
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 28
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 29
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 30
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 31
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 32
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 33
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13
}
34
Incremental Computation (2/2)
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13
MidpointEighthCircle(R){/*1/8thofacirclew/radiusR*/intx=0,y=R;floatdecision=(x+1)*(x+1)+(y-0.5)*(y-0.5)–R*R;WritePixel(x,y);
while(y>x){if(decision<0){//MoveEastdecision+=2*x+3;x++;WritePixel(x,y);}else{//MoveSouthEastdecision+=2*x–2*y+5;y--;x++;WritePixel(x,y);}}}
35
Midpoint Eighth Circle Algorithm (less optimized)
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 36
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 37
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13
MidpointEighthCircle(R){/*1/8thofacirclew/radiusR*/intx=0,y=R;intdeltaE=2*x+3;intdeltaSE=2*(x-y)+5;floatdecision=(x+1)*(x+1)+(y-0.5)*(y-0.5)–R*R;WritePixel(x,y);
while(y>x){if(decision<0){//MoveEastx++;WritePixel(x,y);decision+=deltaE;deltaE+=2;deltaSE+=2;//Updatedeltas}else{//MoveSouthEast y--;x++;WritePixel(x,y);decision+=deltaSE;deltaE+=2;deltaSE+=4;//Updatedeltas}}}
38
Midpoint Eighth Circle Algorithm
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13
} AlignedEllipses
} Non-integerprimitives
} Generalconics
} Patternedprimitives
39
Other Scan Conversion Problems
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 40
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 41
CS452 | COMPUTER GRAPHICS
CourtesyofAndriesvanDam©ScanConversion-10/15/13 42