Hi Robert and Eric,

Perhaps I can try to explain the limitations of my solution more clearly so a 
more informed decision may be made whether to include some version of it in OSG.

Because each glyph is rendered to an area larger than the glyph size, there is 
some overlap between adjacent glyphs. Depending on the glyphs being rendered, 
depth test settings, view angles, and resulting round off error can cause one 
glyph to prevent some of its neighbor's pixels from rendering. The solution to 
this problem is to prevent each glyph's pixels from being depth tested against 
neighboring glyphs' pixels.

In my usage, I do this by disabling depth writes (depth test is not disabled) 
for text since my text is always drawn against some background object - I have 
no need for text floating in space occluding other objects. This means that 
free-floating text can be overwritten by objects behind it. However, it can be 
argued that antialiased text, as a semi-transparent object, ought to be 
rendered after all objects behind it anyway.

If desired, support for the current style of free-floating text can be achieved 
by using multiple passes: Drawing the text first with depth writes off, then 
rendering again, but writing only to the depth buffer. Some text styles (using 
backdrops) already use multiple pass rendering so I would guess that this 
variant would be acceptable for inclusion in OSG.

In my particular case, I draw enough text that performance is an issue so I 
stuck with the the single pass technique for my application. The two-pass 
method does not look difficult, though, so if it's desired for inclusion in a 
future OSG release, I can find the time to write the code.

It sounds like Robert is proposing subdividing glyphs and choosing a depth test 
so that equal depth glyphs will not prevent each other from rendering. This 
sounds like a workable solution to the problem. I would even think it 
preferable if all of our character cells were the same dimension, but with 
varying width and height characters on multiple lines, we're talking about a 
fairly complex algorithm that even if it is fast enough to execute, will take 
quite a bit of time to develop.

Mark Sciabica


On 9/9/2010 1:13 PM, Eric Sokolowsky wrote:
Robert,

I'm not doing anything to the depth test. If you actually look at the change 
being proposed, it is just copying a bit larger of an area for each glyph so 
that the anti-aliased edges aren't clipped off.

-Eric

On Thu, Sep 9, 2010 at 11:56 AM, Robert Osfield 
<[email protected]<mailto:[email protected]>> wrote:
HI Eric,

My issue with this approach hasn't changed - it's simply not
acceptable to disable depth test indiscriminately for Text as it'll
force text to always appear on top of everything except things
rendered after it.  Once can workaround this issue by using a
multi-pass stencil buffer technique.

The proper solution will be to not render simple quads for each glyph
but compute the intersection between adjacent quads and render the
glyph as a series of quads so that the overlap share exactly the same
vertices so will render at the same depth.  Once this is done you can
keep depth test on, but get fragments with the same depth to pass the
depth test.

I have some of the design work done for this approach but haven't
tackled any of the implementation.

Robert.

On Thu, Sep 9, 2010 at 3:50 PM, Eric Sokolowsky 
<[email protected]<mailto:[email protected]>> wrote:
I have long been annoyed by osg::Text clipping characters at random times.
Way back in March 2008, Mark Sciabica wrote:

My solution was to modify osgText to draw larger quads for the

character cells (by one texel in each direction), adjusting texture
coordinates accordingly. Side effects are that character cells now
overlap so depth testing needs to be disabled (or some sort of
stenciling operation performed), and extra margin should be allocated

for each character in the texture (using Font::setGlyphImageMargin).

Mark wrote a patch to osg/src/osgText/Text.cpp which fixes the problem for
me, but this change was never incorporated into OSG proper. In his original
message, Mark wrote that this solution required the depth test to be
disabled when drawing glyphs to avoid clipping. I did not encounter any
problems with clipping when applying his patch. The attached Text.cpp is
based on OSG 2.8.3, and I propose it be added and Mark Sciabica be given due
credit for its inclusion. I am also including a screen shot of some text not
using the patch (broken-cropped.png) and the same screen using the patch
(fixed-cropped.png). The difference is most noticeable on the left edge of
certain characters such as 'G', but the change also fixes some of the hard
left edges such as '['. With the fix, all of the left edges are nice and
anti-aliased.

I'm not sure if the other statement Mark made (extra margin should be
allocated for each character in the texture) is needed or not.

I'm aware that Robert is doing some fixes to osgText so if these changes do
not work for the trunk then I'd like to at least have them incorportated
into the 2.8 branch.

-Eric


_______________________________________________
osg-submissions mailing list
[email protected]<mailto:[email protected]>
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org


_______________________________________________
osg-submissions mailing list
[email protected]<mailto:[email protected]>
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org


________________________________
This message and any attachments are solely for the intended recipient and may 
contain confidential or privileged information. If you are not the intended 
recipient, any disclosure, copying, use, or distribution of the information 
included in this message and any attachments is prohibited. If you have 
received this communication in error, please notify us by reply e-mail and 
immediately and permanently delete this message and any attachments. Thank you.
_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to