我在百度看到有人说“那个是底,不可能透明的。”,我觉得不对。我就试着做了一下,我刚开始画5个面时都能透明,然后我试着把四边形的六个面分成俩组,每组3个面,把 glEnable(GL_BLEND); // Turn Blending On
glDisable(GL_DEPTH_TEST); // Turn Depth Testing Off
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Set The Blending Function For Translucency
glColor4f(1.0f, 1.0f, 1.0f, 0.3); // Full Brightness. 50% Alpha
写了俩次就行了。代码如下:
void CTestView::DrawScene(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.0f, 0.0f, -5);
glRotatef(wAngleX, 1.0f, 0.0f, 0.0f);
glRotatef(wAngleY, 0.0f, 1.0f, 0.0f);
glRotatef(wAngleZ, 0.0f, 0.0f, 1.0f);
wAngleX += 1.0f;
wAngleY += 1.5f;
wAngleZ += 1.0f;
glEnable(GL_BLEND); // Turn Blending On
glDisable(GL_DEPTH_TEST); // Turn Depth Testing Off
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Set The Blending Function For Translucency
glColor4f(1.0f, 1.0f, 1.0f, 0.3); // Full Brightness. 50% Alpha
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
glNormal3f( 0.0f, 0.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-a, -a, -a);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-a, a, -a);
glTexCoord2f(0.0f, 1.0f); glVertex3f( a, a, -a);
glTexCoord2f(0.0f, 0.0f); glVertex3f( a, -a, -a);
glEnd();
glBindTexture(GL_TEXTURE_2D, texture[1]);
glBegin(GL_QUADS);
glNormal3f( 0.0f, 0.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-a, -a, a);
glTexCoord2f(1.0f, 0.0f); glVertex3f( a, -a, a);
glTexCoord2f(1.0f, 1.0f); glVertex3f( a, a, a);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-a, a, a);
glEnd();
glBindTexture(GL_TEXTURE_2D, texture[2]);
glBegin(GL_QUADS);
glNormal3f( 0.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-a, a, -a);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-a, a, a);
glTexCoord2f(1.0f, 0.0f); glVertex3f( a, a, a);
glTexCoord2f(1.0f, 1.0f); glVertex3f( a, a, -a);
glEnd();
glEnable(GL_BLEND); // Turn Blending On
glDisable(GL_DEPTH_TEST); // Turn Depth Testing Off
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Set The Blending Function For Translucency
glColor4f(1.0f, 1.0f, 1.0f, 0.3); // Full Brightness. 50% Alpha
glBindTexture(GL_TEXTURE_2D, texture[3]);
glBegin(GL_QUADS);
glNormal3f( 0.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-a, -a, -a);
glTexCoord2f(0.0f, 1.0f); glVertex3f( a, -a, -a);
glTexCoord2f(0.0f, 0.0f); glVertex3f( a, -a, a);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-a, -a, a);
glEnd();
glBindTexture(GL_TEXTURE_2D, texture[4]);
glBegin(GL_QUADS);
glNormal3f( 1.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( a, -a, -a);
glTexCoord2f(1.0f, 1.0f); glVertex3f( a, a, -a);
glTexCoord2f(0.0f, 1.0f); glVertex3f( a, a, a);
glTexCoord2f(0.0f, 0.0f); glVertex3f( a, -a, a);
glEnd();
glBindTexture(GL_TEXTURE_2D, texture[5]);
glBegin(GL_QUADS);
glNormal3f( -1.0f, 0.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-a, -a, -a);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-a, -a, a);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-a, a, a);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-a, a, -a);
glEnd();
glPopMatrix();
//利用双缓存的机制,实现动画
SwapBuffers(wglGetCurrentDC());
}