Jump to content
  • Advertisement
Sign in to follow this  
Shawn619

3D draw colors bleed into 2D draw colors

This topic is 1999 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

When I draw things in 3D perspective, which contains green lighting, it bleeds into my 2D ortho drawings.

 

In this picture, I draw my 3d scene on the large left-side viewport, and draw my 2d scene on the smaller right-side viewport(which contains a 2d red triangle):

 

(you can see the full red triangle has been tainted with green colors from previous 3d drawings)

 

2mgtwci.jpg

 

This is my drawing structure:

//start 3d drawing
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, windowWidth/1.3, windowHeight);
glClearColor(0,0.5,0.5,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (float)windowWidth / (float)windowHeight, 0.4, 9000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
 
//draw 3d primitives + model and view transforms
 
//2D drawing
glClear(GL_DEPTH_BUFFER_BIT);
glViewport(windowWidth/1.3, 0, windowWidth, windowHeight);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, windowWidth, windowHeight, 0.0f, 0.0f, 1.0f);
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
 
//draw red triangle
glPushMatrix();
    glColor3f(1.0f, 0.0f, 0.0f);
    glBegin(GL_TRIANGLES); 
        glVertex3f(0.0f, 0.0f, 0.0f); 
        glVertex3f(20.0f, 20.0f, 0.0f);
        glVertex3f(70.0f, 20.0f, 0.0f);
    glEnd(); 
glPopMatrix();
 
//swap buffers
glutSwapBuffers();
 

Share this post


Link to post
Share on other sites
Advertisement
A wild guess, but I see a glEnable/glDisable pair for every OpenGL state except GL_COLOR_MATERIAL. Perhaps your 2d triangles are inheriting your 3d object's green material color?

Share this post


Link to post
Share on other sites

That's a good guess, and I thought that would work, but it had no effect.

 

The only green material that is given off is from my light[0] in 3d drawing. Your post made me think of also doing "glDisable(GL_LIGHT0)", but even that had no effect.

Share this post


Link to post
Share on other sites
Remember to
glUseProgram(0);
To properly disable the shader.

I'm uncertain with regard to what glDeleteProgram does on its own, but I really doubt that you need to call it every frame...

Share this post


Link to post
Share on other sites

Solved!

 

Thanks superVGA, I had the concept of disableing and deleteing a shader confused.

 

I forgot to include the fact that I used glUseProgram, so disableing the shader before drawing 2d by calling glUseProgram(0) fixed my problem.

 

One last question though, how is it that i'm able to

 

glDisable(GL_LIGHTING);
glDisable(GL_LIGHT0);
glUseProgram(shaderOne);
 

 

yet my shader still works? Is it because GL_LIGHTING only pertains to OpenGL's fixed-function lighting, and not to GLSL shaders?

Share this post


Link to post
Share on other sites
Exactly. AFAIK there's no fixed functionality once you enable a shader meant to output or change that purpose.
As such, you can still have fixed function fragments if you're only using a vertex shader.
You can still get vertex lightning if you leave the pipeline alone, but I honestly don't know where that is ultimately computed.

Share this post


Link to post
Share on other sites

Oh ok, if the shader effectively "cuts off" fixed-function communication, then will

 

GLfloat specular[] = {1.0, 1.0, 1.0, 1.0};
glLightfv(GL_LIGHT2, GL_SPECULAR, specular);

still be passed into the shader, so I can access it like so:

 

gl_LightSource[2].specular

?

Edited by Shawn619

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.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!