Jump to content

  • Log In with Google      Sign In   
  • Create Account


Transparent gaps between triangles on Windows 7?!


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
7 replies to this topic

#1 Grumple   Members   -  Reputation: 157

Like
0Likes
Like

Posted 08 June 2010 - 01:41 AM

Hi Guys,

I just ported some OpenGL rendering code that worked fine running on Windows XP/Visual Studio 2005 to Windows 7/Visual Studio Express 2010. The port was generally smoother than I had even hoped...it ran almost immediately with just some minor tweaking.

However, I noticed one really strange issue; there is a small transparent gap at the edges of all my triangles. It looks to be just a single or few pixels wide, but it is affecting every triangle I render. I had never seen this on XP and non of my OpenGL config has changed.

I admittedly haven't dug deep searching for the cause yet in code, but I'm hoping someone here has a quick and dirty answer?

Thanks!

Sponsor:

#2 wondersonic2   Members   -  Reputation: 100

Like
0Likes
Like

Posted 08 June 2010 - 02:00 AM

Quote:
Original post by Grumple
Hi Guys,

I just ported some OpenGL rendering code that worked fine running on Windows XP/Visual Studio 2005 to Windows 7/Visual Studio Express 2010. The port was generally smoother than I had even hoped...it ran almost immediately with just some minor tweaking.

However, I noticed one really strange issue; there is a small transparent gap at the edges of all my triangles. It looks to be just a single or few pixels wide, but it is affecting every triangle I render. I had never seen this on XP and non of my OpenGL config has changed.

I admittedly haven't dug deep searching for the cause yet in code, but I'm hoping someone here has a quick and dirty answer?

Thanks!


Hello,
do you have some screenshot?

Regards,
WS



#3 Grumple   Members   -  Reputation: 157

Like
0Likes
Like

Posted 09 June 2010 - 03:29 AM

Sorry I don't have a screen-shot readily available, as this is an old OpenGL engine I am converting in pieces, and haven't hooked that functionality up.

I did more testing last night, and came across the apparent cause...although I have no idea why. It seems that enabling anti-aliasing is the cause of my problem?!

Specifically I am using polygon smoothing via:
glEnable(GL_POLYGON_SMOOTH);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

When I enable this I always see gaps between my triangles. Disabling it everything works fine. I am particularly surprised as this functionality always worked perfectly on my x86 WinXP development machine.

I even double checked to make sure vertex coords of adjacent/connected triangles are identical (they are).

I can try to get my screen shot functionality up and running, but the issue is easy enough to visualize. If I render a 'sphere' of triangles without anti-aliasing it shows up solid against a colored background. If I enable polygon smooth, I can see 'lines' along all triangle edges of the sphere of the same color as the background (back face culling is enabled). I even see this effect rendering two triangles directly facing the camera (one diagonal see-through line where they connect). The gap only ever seems to be 1 pixel wide.

Any thoughts? For now I can just disable anti-aliasing but I'd like to at least understand what is going on...

Thanks!

#4 _Unicron_   Members   -  Reputation: 253

Like
0Likes
Like

Posted 09 June 2010 - 03:44 AM

Are your graphics drivers upto date?

#5 Sik_the_hedgehog   Crossbones+   -  Reputation: 1411

Like
0Likes
Like

Posted 09 June 2010 - 03:45 AM

When I was checking some code of an API using OpenGL (I don't remember which one right now), I found that antialiasing was enabled through an extension, not through GL_POLYGON_SMOOTH. Also it was enabled in a completely different way, by specifying the degree of antialiasing expected.

I think you're dealing with something that has nothing to do with the antialiasing hardware used for standard stuff, but more like "antialias sides regardless of other primitives". It happened to work elsewhere because of broken drivers (most likely a misunderstanding), probably.

#6 Grumple   Members   -  Reputation: 157

Like
0Likes
Like

Posted 09 June 2010 - 03:50 AM

Hey Guys,

Thanks for the quick replies. My graphics drivers are definitely up to date, Uni.
I think your suggestion was dead on though, Sik. Once I knew it was my smoothing causing the problem I did some googling, and found others encountering this issue. My fix was to change my smoothing implementation as follows:

Change this:

if(FLO_ENABLE_ANTI_ALIASING == TRUE)
{
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POLYGON_SMOOTH);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
}

To

if(FLO_ENABLE_ANTI_ALIASING == TRUE)
{
glEnable(GL_MULTISAMPLE_ARB);
}

Everything seems to be working fine now. I am just confused as to why it used to work fine the old way on an 8800 GTS but failed on a new GTX470..

Thanks for the help!

#7 Sik_the_hedgehog   Crossbones+   -  Reputation: 1411

Like
0Likes
Like

Posted 09 June 2010 - 04:29 AM

Quote:
Original post by Grumple
Everything seems to be working fine now. I am just confused as to why it used to work fine the old way on an 8800 GTS but failed on a new GTX470..

nVidia probably wanted to save hardware resources (or development budget =P) and reused the framebuffer antialiasing hardware, since in the end the outcome is similar to what the user would want.

Quote:
Original post by Grumple
Thanks for the help!

You're welcome! =)

#8 MarkS   Members   -  Reputation: 180

Like
0Likes
Like

Posted 09 June 2010 - 05:31 AM

Quote:
Original post by Grumple
Everything seems to be working fine now. I am just confused as to why it used to work fine the old way on an 8800 GTS but failed on a new GTX470..


This is an known issue with GL_POLYGON_SMOOTH. I ran into this issue on a 7950GT several years ago when I wrote a wide line function that rendered anti-aliased polygons. The only solution was to set the edge flags so that only the exterior edges were anti-aliased. However, this is rather difficult with a closed object. Heck, it was difficult to do with a wide line.

It is worth mentioning that this is a depreciated feature.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS