2 colors depending on depth...
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...
glEnable(GL_COLOR_MATERIAL); //Enables ColoringglColor3f(0.0f,0.0f,1.0f); //Makes it BlueglDisable(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
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 :(
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 :(
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
Enigma
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.
Does this do what you are wanting?
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
#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
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement