Trouble drawing point-sampled polygons

Gary Tarolli garyt at westcoast.esd.sgi.com
Tue Feb 12 03:42:31 AEST 1991


In article <1991Feb8.200816.20381 at Neon.Stanford.EDU>, loan at Neon.Stanford.EDU (James P. Loan) writes:
> 
> I'm trying to draw several copies of the same polygon and I'm having
> a hard time getting them to look EXACTLY alike. I realize that there
> is round-off error when translating within a window, but the manual
> presents a way to fix that. I thought the purpose of the +/-0.5
> adjustment in an ortho2() call was to "move" the coordinate system
> so that integer vertices would fall exactly in the center of pixels.
> Well, I wrote a test program which seems to prove exactly the opposite.
> When I add in the +/-0.5 adjustment, there is [round-off] error which
> makes one copy of a trapezoid smaller than the other (sometimes). When
> I take out the adjustment, there is no difference between the polygons.
> Since the error involves the top (flat) edge of the trapezoid, it must
> mean that the top two vertices are falling on pixel edges. By the way,
> the same problem arises if I draw screen-aligned rectangles instead
> of trapezoids, so the problem is with VERTICES falling on pixel edges,
> not points on the lines connecting the vertices.
> 
> Can anyone explain to me what is going on?
> 

When you are drawing old style polygons, you want your polygon vertices to 
land exactly on pixel centers.  But when you are drawing point-sampled
polygons you want the opposite - you should place your vertices exactly
on the pixel borders.  This is because the decision to fill a pixel or not
is based on whether the pixel center is in/outside  of the polygon. If
the polygon edge goes right thru the center of a pixel, then you are
susceptable to round off error. If you move your vertices to pixel
borders (1.5, 2.5, etc) then it takes a big roundoff error to make
things fail ( magnitude of .5).

Warning - if you attempt to do this by introducing a translate matrix,
beware if you are ddrawing lines - it may have an undesired effect on
lines.  Andrew Meyers once went thru all this and came up with a scheme
for drawing exact polygons on all our machines for doing 2-D User Interface
code.  Any comments Andrew?

--------------------
	Gary Tarolli



More information about the Comp.sys.sgi mailing list