屏幕分辨率为16位色时,指定透明色为清除色,glClear无法清除alpha位,alpha始终是255,即不透明。
屏幕分辨率为32位时,正常。
PIXELFORMATDESCRIPTOR pixelDesc=
{
sizeof(PIXELFORMATDESCRIPTOR), // nSize
1, // nVersion
//PFD_DRAW_TO_BITMAP|PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL, // dwFlags
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER, // dwFlags
PFD_TYPE_RGBA, // iPixelType
24, // cColorBits
0, // cRedBits
0, // cRedShift
0, // cGreenBits
0, // cGreenShift
0, // cBlueBits
0, // cBlueShift
8, // cAlphaBits
0, // cAlphsShift
0, // cAccumBits
0,0,0,0, // cAccumRedBits,cAccumGreenBits,cAccumBlueBits,cAccumAlphaBits
0, // cDepthBits 
0, // cStencilBits
0, // cAuxBuffers
PFD_MAIN_PLANE, // iLayerType
0, // bReserved
0,0,0 // dwLayerMask,dwVisibleMask,dwDamageMask
}; int nGLPixelIndex = ChoosePixelFormat(hDC,&pixelDesc);...glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);另外再问个问题,在使用2维纹理时,当前颜色为什么会影响纹理图像的颜色?
比如glColor4f(0.0,0.0,0.0,0.0)后,再使用纹理填充多边形后,就看不到纹理了。万分感谢!

解决方案 »

  1.   

    第一个问题,不太好回答,可能是16位色中Alpha只占用一位,非有即无,清除的位指定错误了。
    第二个问题,顶点坐标应用纹理的时候可以指定混合方式。如
    glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
    我看应该换成
    glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
    才是你需要的。
      

  2.   

    比如glColor4f(0.0,0.0,0.0,0.0)后,你这个不是黑屏了么?!
      

  3.   


    感谢jiangcaiyang123,你帮助解决了第二个问题。
    对第一个问题,即使使用glDrawPixels都无法修改Alpha值,莫非16位分辩率下OpenGL的帧缓存没有Alpha位?
      

  4.   

    屏幕为16位色时,pixelDesc可否也做了响应更改?