GLuint GLWidget::makeObject(GLuint listid, GLfloat x, GLfloat y, GLfloat z)
{
GLuint list = glGenLists(listid);
glNewList(list, GL_COMPILE);
// glPushMatrix();
glClear(GL_STENCIL_BUFFER_BIT);
glEnable(GL_STENCIL_TEST);
glClearStencil(0);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, Pearl[AMBIENT]);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, Pearl[SHININESS]);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Pearl[DIFFUSE]);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, Pearl[SPECULAR]);
// glColorMask(0,0,0,0);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP,GL_KEEP,GL_REPLACE);
// glDepthMask(GL_FALSE);
glBegin(GL_QUADS);
glNormal3f( 0, y, 0 );
glVertex3f( x/2, y, -z/2 );
glNormal3f( 0, y, 0 );
glVertex3f( -x/2, y, -z/2 );
glNormal3f( 0, y, 0 );
glVertex3f( -x/2, y, z/2 );
glNormal3f( 0, y, 0 );
glVertex3f( x/2, y, z/2 );
glEnd();
// glColorMask(1,1,1,1);
// glDepthMask(GL_TRUE);
glStencilFunc(GL_NOTEQUAL, 1, 1);
glStencilOp(GL_KEEP,GL_KEEP,GL_KEEP);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, Ruby[AMBIENT]);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, Ruby[SHININESS]);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Ruby[DIFFUSE]);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, Ruby[SPECULAR]);
glBegin(GL_QUADS);
//top
glNormal3f( 0, y, 0 );
glVertex3f( x, y, -z );
glNormal3f( 0, y, 0 );
glVertex3f( -x, y, -z );
glNormal3f( 0, y, 0 );
glVertex3f( -x, y, z );
glNormal3f( 0, y, 0 );
glVertex3f( x, y, z );
glEnd();
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP,GL_KEEP,GL_KEEP);
glBegin(GL_QUADS);
//bottom
glNormal3f( 0, -y, 0 );
glVertex3f( x, -y, z );
glNormal3f( 0, -y, 0 );
glVertex3f( -x, -y, z );
glNormal3f( 0, -y, 0 );
glVertex3f( -x, -y, -z );
glNormal3f( 0, -y, 0 );
glVertex3f( x, -y, -z );
//front
glNormal3f( 0, 0, z );
glVertex3f( x, y, z );
glNormal3f( 0, 0, z );
glVertex3f( -x, y, z );
glNormal3f( 0, 0, z );
glVertex3f( -x, -y, z );
glNormal3f( 0, 0, z );
glVertex3f( x, -y, z );
//back
glNormal3f( 0, 0, -z );
glVertex3f( x, -y, -z );
glNormal3f( 0, 0, -z );
glVertex3f( -x, -y, -z );
glNormal3f( 0, 0, -z );
glVertex3f( -x, y, -z );
glNormal3f( 0, 0, -z );
glVertex3f( x, y, -z );
//left
glNormal3f( -x, 0, 0 );
glVertex3f( -x, y, z );
glNormal3f( -x, 0, 0 );
glVertex3f( -x, y, -z );
glNormal3f( -x, 0, 0 );
glVertex3f( -x, -y, -z );
glNormal3f( -x, 0, 0 );
glVertex3f( -x, -y, z );
//right
glNormal3f( x, 0, 0 );
glVertex3f( x, y, -z );
glNormal3f( x, 0, 0 );
glVertex3f( x, y, z );
glNormal3f( x, 0, 0 );
glVertex3f( x, -y, z );
glNormal3f( x, 0, 0 );
glVertex3f( x, -y, -z );
glEnd();
glDisable(GL_STENCIL_TEST);
// glPopMatrix();
glEndList();
return list;
}