for my program I want to try something new, I would like to draw a transparent sphere with a smaller non transparent one inside, as illustrated. Any idea how to do this?
All I can do, is some blending when the sphere is behind an object, but I can't make it really blend when it is in the foreground. Below is the code I currently use for drawing the sphere.
Code:
// Draw a sphere at the position of the node
GLfloat ambient1[] = {0.5f, 0.5f,0.5f,1.0f};
GLfloat ambient2[] = {0.2f, 0.2f,0.2f,1.0f};
GLfloat diffuse[] = {0.7f, 0.7f,0.7f,1.0f};
GLfloat position1[] = {0.0f,-1.0f,0.0f,0.0f};
GLfloat position2[] = {0.0f, 1.0f,0.0f,0.0f};
GLfloat spec[] = {1.0f, 1.0f,1.0f,1.0f};
GLfloat specma[] = {1.0f, 1.0f,1.0f,1.0f};
glShadeModel(GL_SMOOTH); // Smooth rendering
glFrontFace(GL_CCW); // Counter clock-wise polygons face out
glEnable(GL_DEPTH_TEST); // Hidden surface removal
glEnable(GL_LIGHTING); // Enable lighting
glEnable(GL_POLYGON_OFFSET_FILL); // Correction for small errors
glPolygonOffset(0.5, 2.0);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambient1);
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,1);
glLightfv(GL_LIGHT0,GL_POSITION,position1); // Setup and enable light 0
glLightfv(GL_LIGHT0,GL_AMBIENT,ambient2);
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse);
glLightfv(GL_LIGHT0,GL_SPECULAR,spec);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT1,GL_POSITION,position2); // Setup and enable light 1
glLightfv(GL_LIGHT1,GL_AMBIENT,ambient2);
glLightfv(GL_LIGHT1,GL_DIFFUSE,diffuse);
glLightfv(GL_LIGHT1,GL_SPECULAR,spec);
glEnable(GL_LIGHT1);
glEnable(GL_COLOR_MATERIAL); // Set Material properties to follow glColor values
glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
glMaterialfv(GL_FRONT,GL_SPECULAR,specma);
glMateriali(GL_FRONT,GL_SHININESS,128);
glColor4d(0,0,1,0.150);
GLUquadricObj *quadric=gluNewQuadric();
gluQuadricNormals(quadric, GLU_SMOOTH);
glTranslated( P.x, P.y, P.z );
double radius = 0.002;
gluSphere(quadric,radius,50,50);
glEnable( GL_BLEND );
glDisable(GL_DEPTH_TEST);
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
gluSphere(quadric,radius,50,50);
glEnable(GL_DEPTH_TEST);
glTranslated(-P.x,-P.y,-P.z );
gluDeleteQuadric(quadric);
//// restore rendering context //
glDisable(GL_POLYGON_OFFSET_FILL);
glDisable(GL_COLOR_MATERIAL);
glDisable(GL_LIGHTING);
glDisable(GL_LIGHT1);
glDisable(GL_LIGHT0);
glDisable(GL_BLEND);
* The Best Reasons to Target Windows 8
Learn some of the best reasons why you should seriously consider bringing your Android mobile development expertise to bear on the Windows 8 platform.