Jump to content
  • Advertisement
Sign in to follow this  
Grumple

OpenGL Transparent gaps between triangles on Windows 7?!

This topic is 3179 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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!

Share this post


Link to post
Share on other sites
Advertisement
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

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites
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! =)

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!