⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 38921

📁 神经网络昆斯林的新闻组分类2006
💻
字号:
Newsgroups: comp.graphicsPath: cantaloupe.srv.cs.cmu.edu!das-news.harvard.edu!noc.near.net!howland.reston.ans.net!usc!cs.utexas.edu!geraldo.cc.utexas.edu!portal.austin.ibm.com!awdprime.austin.ibm.com!markFrom: einkauf@austin.ibm.com (Mark Einkauf)Subject: Re: Need help: Z-buffering lines & areas togetherOriginator: mark@einkauf.austin.ibm.comMessage-ID: <C67Az1.1qxA@austin.ibm.com>Sender: mark@austin.ibm.com (Mark Einkauf)Date: Wed, 28 Apr 1993 15:57:00 GMTReferences:  <gorgen.735950271@aa.cad.slb.com>Organization: IBM AustinKeywords: Z-buffer, roundoff, lines, areasLines: 105  David Gorgen writes:> I'm asking for help on a sticky problem involving unreasonably low> apparent precision in Z-buffering, that I've encountered in 2 different> PEX implementations.  I can't find any discussion of this problem in any> resources I can lay hands on (e.g. the comp.windows.x.pex FAQ, Gaskins's> _PEXlib_Programming_Manual_, vendors' documentation).>> ....>> The problem to be solved is to eliminate or minimize "stitching"> artifacts resulting from the use of Z-buffering with polylines that are> coplanar with filled areas.  The interpolated Z values along a line will> differ slightly, due to roundoff error, from the interpolated Z values> across an area, even when the endpoints of the line are coincident with> vertices of the area.  Because of this, it's a tossup whether the> Z-buffer will allow the line pixels or the area pixels to be displayed.> Visually, the result tends to be a dashed-line effect even though the> line is supposed to be solid.>> Using the PEXlib API, my approach to a solution is to use two slightly> different PEX view mapping transforms, in two view table entries, one> for the areas and one for the lines.  The PEX structures or immediate-> mode output must be organized so that one view table index is always in> effect for areas, and the other is always in effect for lines.  The> result is a slight shift in NPC Z coordinates for the lines, so as to> attempt to bias the tossup situations in favor of the lines.>> This shift is effected by moving the front and back clipping planes used> in the PEXlib view table entry for lines just a hair "backwards" (i.e.> smaller VRC Z coordinates), compared to their positions in the view> table entry used for areas.  This means that when a point is transformed> to NPC, its Z value will be slightly bigger if it comes from a line than> if it comes from an area, thus accomplishing the desired bias.>> I would expect the Z roundoff errors which cause the problem to amount> to a few units at most, out of the entire dynamic range of the Z-buffer,> typically from 0 to 65535 if not 16777215 (i.e. 16 or 24 bit Z-buffers).> Therefore, it seems that a tiny fraction of the range of Z in VRC> between the front and back clip planes ought to suffice to reliably fix> the stitching.>> But in fact, experience shows that the shift has to be as much as 0.003> to 0.006 of the range.  (Empirically, it's worst when the NPC Z> component of the slope of the surface is high, i.e. when it appears more> or less edge-on to the viewer.)  It's as if only 8 or 9 bits of the> Z-buffer have any dependable meaning!  This amount is so great that one> problem is replaced by another: sometimes the polylines "show through"> areas which they are supposed to lie behind.>> I've observed the problem on both Hewlett-Packard and Digital> workstation PEX servers, to approximately the same degree.  The test> program demonstrates the problem on an MIT PEXlib 5.x implementation;> this version is known to compile and run on an HP-UX system with PEX> 5.1.>> Open questions:>     (1) Why does this happen?>         --  Am I configuring the PEX view table wrongly?>         --  Is there a systematic difference in Z interpolation for lines>             as opposed to areas (e.g. pixel centers versus corners) which>             could be corrected for?>         --  Are PEX implementors wantonly discarding Z precision in their>             interpolators?>         --  Something else?>     (2) What to do about it?>         --  Can I fix my use of the view table to allow better precision>             in Z-buffered HLHSR?>         --  Is there another approach I can take to remove the stitching>             artifacts?>         --  Am I just out of luck?>We here at IBM have the same problem with our workstations.  I was alsoshocked when I first realized that you have to offset lines from fills byabout 16 bits (assuming 24 bit z buffer).  This seems huge, but is only1/256 of the dynamic range.  In those terms it doesn't seem so bad.  Whatis happening is that the interpolation in z is not totally linear, duemainly to roundoff, I believe.  So the polygon is not planar in z, but ismore like a Ruffles potato chip.  Ditto with lines.  When you start/end atdifferent x/y values, the "ridges" are out of phase, resulting in thestitch effect.  You have the same problem if you try to draw 1 polygonright on top of another, but with different vertices.  You will likely seea smeared effect where they overlap.  Example:  Try Polygon 1: (100,100,100) (100,200,100) (200,200,100) (200,100,100)      Polygon 2: (125,125,100) (125,175,100) (175,175,100) (175,125,100)Your implementation is correct.  In fact, we do a similar trick whenrendering primitives that have lines and polygons - such as NURBS surfaceswith isoparametric lines.  Without the trick, the lines appear stitched, asyou say.  When the application draws lines/polygons independently, thesystem does not have the smarts to automatically do the z shifting, so theapplication must do it.  This is what you have discovered and are doing.Bravo!(Note to IBM'ers:  The information given here has been previously disclosedthrough proper channels so I'm not giving away any new unpublished info.)--   Mark Einkauf     [ einkauf@austin.ibm.com ]  IBM - Advanced Workstations and Systems - Graphics Systems  Austin TX * Views and opinions expressed herein are not necessarily those of IBM Corp. *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -