glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Black Background
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearDepth(1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// Zoom handling
glTranslatef(Vista.x0 * Vista.Scale * (1.0f/ScaleIniziale), Vista.yy0 * Vista.Scale * (1.0f/ScaleIniziale), Vista.z0-5.0f);
glScalef(Vista.Scale,Vista.Scale,Vista.Scale);
// Lights
glCallList(ListeLuci.Lights);
glPushMatrix();
// Draw stuff like the texture background
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glTranslatef(0.0f, 0.0f, 0.0f);
glCallList(Liste.Map);
glTranslatef(0.0f, 0.0f, 0.01f);
glTranslatef(0.0f, 0.0f, -0.009f);
// Draw transparent stuff (like critical area highlight)
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glTranslatef(0.0f, 0.0f, 0.001f);
if (m_view_critical == TRUE) glCallList(Liste.CriticalArea);
glTranslatef(0.0f, 0.0f, 0.001f);
if (m_view_FOVs == TRUE) DrawFOA();
glTranslatef(0.0f, 0.0f, 0.001f);
DrawVehicles(GL_RENDER);
glTranslatef(0.0f, 0.0f, 0.005f);
DrawTracks(GL_RENDER);
glPopMatrix();
glFlush();
// Draw non-transparent lines representing a graph
glColor3ub(255,0,0);
for(it = graph.begin(); it != graph.end(); it++)
{
// [...]
// Compute stuff
for(itedge = edges.begin(); itedge != edges.end(); itedge++)
{
glLineWidth (1);
glBegin(GL_LINES);
glVertex3f(FROM.x,FROM.y,0.0f);
glVertex3f(TO.x,TO.y,0.0f);
glEnd();
}
}
Blending and lines, code behaves differently depending on PC
I'm currently writing a Simulator for a project im working at. I used to work with a buddy that handled the OpenGL part of it, but now he's gone so I inherited that aswell. I had to add a small piece of code for drawing lines (path taken by a vehicle), but while on some PCs it works fine (nice RED color), on my laptop and some other PCs it doesn't work, and the color is different, and seems actually blended (if i turn off the critical area display the line's color changes.). I've tried messing around with the position of my own code, but result doesn't change. I'm puzzled because it looks fine on some PCs and in some it looks odd :(
I've tried to cut the unimportant code off and just posted the part that's releted to rendering
Thanks for any help
// Draw transparent stuff (like critical area highlight)
glEnable(GL_BLEND);
The glDisable(GL_BLEND) call is missing here.
Add that after the glFlush() call and see what happens. ;)
Edit: Ah, and you should put your glLineWidth() / glBegin(GL_LINES) / glEnd() calls outside the loop (at least the inner one).
glEnable(GL_BLEND);
The glDisable(GL_BLEND) call is missing here.
Add that after the glFlush() call and see what happens. ;)
Edit: Ah, and you should put your glLineWidth() / glBegin(GL_LINES) / glEnd() calls outside the loop (at least the inner one).
Quote:Original post by Lord_Evil
// Draw transparent stuff (like critical area highlight)
glEnable(GL_BLEND);
The glDisable(GL_BLEND) call is missing here.
Add that after the glFlush() call and see what happens. ;)
Where exactly the glDisable call is missing? I've tried adding it before drawing my lines but the effect doesn't change. Also tried adding it just before the glPopMatrix() but still the same :/
Quote:
Edit: Ah, and you should put your glLineWidth() / glBegin(GL_LINES) / glEnd() calls outside the loop (at least the inner one).
Agreed. Ty for tip
You should add it after the glFlush() call. Also reenable depth testing (glEnable(GL_DEPTH_TEST); ).
Assuming the functions you didn't post (like DrawTracks() ) don't change the OpenGL state the relevant part could look like:
...
glPopMatrix();
glFlush();
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
...
Another source for the problem could be anti-aliasing/super sampling. Does your application turn that on on specific machines? Or do the machines force OpenGL to perform anti-aliasing (look at the OpenGL display settings)?
Assuming the functions you didn't post (like DrawTracks() ) don't change the OpenGL state the relevant part could look like:
...
glPopMatrix();
glFlush();
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
...
Another source for the problem could be anti-aliasing/super sampling. Does your application turn that on on specific machines? Or do the machines force OpenGL to perform anti-aliasing (look at the OpenGL display settings)?
Quote:Original post by Lord_Evil
You should add it after the glFlush() call. Also reenable depth testing (glEnable(GL_DEPTH_TEST); ).
It was one of the first thing I thought of, but it didn't work.
Quote:
Assuming the functions you didn't post (like DrawTracks() ) don't change the OpenGL state
They don't
Quote:
Another source for the problem could be anti-aliasing/super sampling. Does your application turn that on on specific machines? Or do the machines force OpenGL to perform anti-aliasing (look at the OpenGL display settings)?
Neither of them
Quote:Original post by jezham
Possibly you still have textures enabled before drawing the lines.
Think I fell in love with you :D
Adding glEnable(GL_TEXTURE_2D); after the glPushMatrix() and glDisable(GL_TEXTURE_2D); just before the popMatrix() fixed the problem on my laptop.
Still doesn't explain why it worked on the other PCs, tho i guess it's due to different implementations of OpenGL in the drivers
Thanks!
Quote:Original post by Sime
Think I fell in love with you :D
Adding glEnable(GL_TEXTURE_2D); after the glPushMatrix() and glDisable(GL_TEXTURE_2D); just before the popMatrix() fixed the problem on my laptop.
Still doesn't explain why it worked on the other PCs, tho i guess it's due to different implementations of OpenGL in the drivers
Thanks!
Feeling the love :)
I guess the other PCs had anti aliasing or anisotropic filtering. Your (textured) line had no tex-coords supplied, and the filters were mixing colours from around the lower-left (plus wrapping) of the previous bound texture.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement