PDA

View Full Version : my color is wrong ! help me !



McZ
01-12-2001, 10:34 AM
this is the problem! if you look into the code I have made myself a nice object class. it works fine but when I use my new implemented material structure the color of my object is screwed up! the code in part 1 is my new fine object class http://www.opengl.org/discussion_boards/ubb/smile.gif when I use it the color of my cube is pink! why ?? if I goes back to the old ( code part 2 ) the object is blue as it should be ! I canīt see anything wrong ! and the light settings isnīt changed! http://www.opengl.org/discussion_boards/ubb/confused.gif

=-=-=-=-=-= Code Part 1 =-=-=-=-=-=
the main structor for the material setup! I have removed the other parts.

struct OGL_Material // the structure for storing the material color
{
GLfloat shininess[1];
GLfloat specular[4];
GLfloat diffuse[4];
GLfloat ambient[4];
};

class OGL_Object
{
// some other stuff like vertex tables and normal tabels
int colorchange;
OGL_Material Material;

// Other functions who adds vertexis and stuff
void SetMaterial(int pname, GLfloat R, GLfloat G, GLfloat B, GLfloat A);
};

void OGL_Object::SetMaterial(int pname, GLfloat R, GLfloat G, GLfloat B, GLfloat A)
{
switch(pname)
{
case GL_AMBIENT:
Material.ambient[0] = R; Material.ambient[1] = G;
Material.ambient[2] = B; Material.ambient[3] = A;
break;
case GL_DIFFUSE:
Material.diffuse[0] = R; Material.diffuse[1] = G;
Material.diffuse[2] = B; Material.diffuse[4] = A;
break;
case GL_SPECULAR:
Material.specular[0] = R; Material.specular[1] = G;
Material.specular[2] = B; Material.specular[3] = A;
break;
case GL_SHININESS:
Material.shininess[0] = R;
break;
default:
break;
}
}


I do this when I render the object:
if (colorchange == 1) //Check If the color would change I have tried without this too
{
glMaterialfv(GL_FRONT, GL_AMBIENT, Material.ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, Material.diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, Material.specular);
glMaterialfv(GL_FRONT, GL_SHININESS, Material.shininess);
colorchange == 0; // Set this to 0 so it donīt change the color next frame
}


this is what I do when I initialize the object
MyCube.SetMaterial(GL_AMBIENT, 0.0f, 0.0f, 0.2f, 1.0f);
MyCube.SetMaterial(GL_DIFFUSE, 0.0f, 0.0f, 0.6f, 1.0f);
MyCube.SetMaterial(GL_SPECULAR, 0.3f, 0.3f, 0.8f, 1.0f);
MyCube.SetMaterial(GL_SHININESS, 10.0f, 0.0f, 0.0f, 0.0f);

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

=-=-=-=-=-= Code Part 2 =-=-=-=-=-=

//this is set before the render proc
GLfloat Material_shininess[] = {10.0};
GLfloat Material_specular[] = {0.3f, 0.3f, 0.8f, 1.0f};
GLfloat Material_diffuse[] = {0.0f, 0.0f, 0.6f, 1.0f};
GLfloat Material_ambient[] = {0.0f, 0.0f, 0.2f, 1.0f};

//Here is the material settings in the render loop
glMaterialfv(GL_FRONT, GL_AMBIENT, Material_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, Material_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, Material_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, Material_shininess);
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Thanks for your help http://www.opengl.org/discussion_boards/ubb/smile.gif

Michael Steinberg
01-12-2001, 10:44 AM
I'm getting crazy with these code postings.
Couldn't one expand the code style to that it acts like the visual c one (I mean highlighting keywords, tabs etc.)

01-12-2001, 12:17 PM
Hi,

One thing I noticed is that you wrote
Material.diffuse[4]= A when it should have
been Material.diffuse[4] = A.

01-12-2001, 12:18 PM
Oops
I mean Material.diffuse[3] = A

McZ
01-15-2001, 12:27 AM
o thanks http://www.opengl.org/discussion_boards/ubb/smile.gif i missed that one! hehe.. allways some little thing that makes one look blind or something http://www.opengl.org/discussion_boards/ubb/smile.gif