Jump to content
  • Advertisement
Sign in to follow this  
Xare

2 colors depending on depth...

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

Iam having some trouble with glEnable(GL_DEPTH_TEST); Iam trying to color one color for infront and another color for behind but depth test is refusing to work for me lol. glDisable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); //Enables Coloring glColor3f(0.0f,0.0f,1.0f); //Makes it Blue glDisable(GL_COLOR_MATERIAL); //Disables Coloring (glDrawElements) (mode, count, type, indices); //Redraws glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); //Enables Coloring glColor3f(1.0f,0.0f,0.0f); //Makes it Red glDisable(GL_COLOR_MATERIAL); //Disables Coloring Is there another way to do with without Depth_Test ? I tried using glDepthFunc But iam pretty new at all this...

Share this post


Link to post
Share on other sites
Advertisement
glEnable(GL_COLOR_MATERIAL); //Enables Coloring
glColor3f(0.0f,0.0f,1.0f); //Makes it Blue
glDisable(GL_COLOR_MATERIAL); //Disables Coloring

Will have no effect. If you want to change the material colours using glColor3f you must leave GL_COLOR_MATERIAL enabled while you do your drawing.

Enigma

Share this post


Link to post
Share on other sites
Iam pretty sure ive tried that...

You mean like this right ?

glDisable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL); //Enables Coloring
glColor3f(0.0f,0.0f,1.0f); //Makes it Blue
(glDrawElements) (mode, count, type, indices); //Redraws
glEnable(GL_DEPTH_TEST);
glColor3f(1.0f,0.0f,0.0f); //Makes it Red
glDisable(GL_COLOR_MATERIAL); //Disables Coloring


When I tried that it didnt work.


*edit* yea when i try that ^ it colors red but dosent color blue if its behind.

Ive tried this so many ways :(

Share this post


Link to post
Share on other sites
Having re-read your original post I'm having a hard time visualising what you're trying to do. "One colour for infront and another colour for behind" - infront and behind of what? Can you give a more detailed description?

Enigma

Share this post


Link to post
Share on other sites


Iam trying to color material either red or blue based on the condition of its depth.

Blue if its behind a texture and red if its not.

Share this post


Link to post
Share on other sites
Does this do what you are wanting?
#include <ctime>
#include <GL/glut.h>

const float vertices[3 * 4] =
{
0, 0, 1,
1, 1, -1,
-1, 1, -1,
0, -1, -1,
};

const unsigned char indices[6] =
{
0, 1, 2, 3, 0, 1
};

float alpha = 0;
float beta = 0;
float gamma = 0;
const float alphaIncrement = 0.05;
const float betaIncrement = 0.03;
const float gammaIncrement = 0.021;
int time;

void reshape(int width, int height){
if (height == 0)
{
height = 1;
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, width, height);
gluPerspective(45.0f, GLfloat(width) / GLfloat(height), 0.1f, 50.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0, 0, -5);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glBegin(GL_QUADS);
glVertex2f(-2, -2);
glVertex2f(2, -2);
glVertex2f(2, 2);
glVertex2f(-2, 2);
glEnd();
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glPushMatrix();
glRotatef(alpha, 1, 0, 0);
glRotatef(beta, 0, 1, 0);
glRotatef(gamma, 0, 0, 1);
float currentTime = std::clock();
alpha += (currentTime - time) * alphaIncrement;
beta += (currentTime - time) * betaIncrement;
gamma += (currentTime - time) * gammaIncrement;
time = currentTime;
glDisable(GL_DEPTH_TEST);
glColor3f(0, 0, 1);
glDrawElements(GL_TRIANGLE_STRIP, 6, GL_UNSIGNED_BYTE, indices);
glEnable(GL_DEPTH_TEST);
glColor3f(1, 0, 0);
glDrawElements(GL_TRIANGLE_STRIP, 6, GL_UNSIGNED_BYTE, indices);
glPopMatrix();
glColor4f(0, 1, 0, 0.3);
glEnable(GL_BLEND);
glBegin(GL_QUADS);
glVertex2f(-2, -2);
glVertex2f(2, -2);
glVertex2f(2, 2);
glVertex2f(-2, 2);
glEnd();
glDisable(GL_BLEND);
glutSwapBuffers();
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(0, 0);
glutInitWindowSize(512,512);
glutCreateWindow("Depth Colour Test");
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutIdleFunc(display);
glDepthFunc(GL_LEQUAL);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);
time = std::clock();
glutMainLoop();
return 0;
}

It's just a simple example using a rotating triangular pyramid with a quad for the plane to determine infront/behind. This example doesn't use material properties. Hopefully this example will either help you find where you're going wrong, or at least let you confirm whether or not I understand what you're trying to do.

Enigma

Share this post


Link to post
Share on other sites

I needed to identify what I was coloring before I could make it compair the depth.. I used counts. lol

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.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!