MFC中使用OpenGL深度测试后图像无法显示,glEnable(GL_DEPTH_TEST),注释后可以正常显示,写了几个案例都是同样问题,代码如下,望大佬解惑。
unsigned tex;
unsigned tex2;
unsigned tex3;
unsigned Gluint_make(float width,float height ,const void* data){
glEnable(GL_TEXTURE_2D);
unsigned texID;//创建纹理句柄
glGenTextures(1, &texID);//创建几个纹理,存放在什么地方
glBindTexture(GL_TEXTURE_2D, texID);//绑定纹理
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//模型缩放后纹理的变化算法
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
return texID;}unsigned LodeFreeImage(const char* File_Name){
//获取文件格式
FREE_IMAGE_FORMAT  fm = FreeImage_GetFileType(File_Name, 0);
if (fm == FIF_UNKNOWN){
return 0;//不支持的格式
}
//加载图片
FIBITMAP * dib = FreeImage_Load(fm,File_Name,0);
//获取图片像素格式
FREE_IMAGE_COLOR_TYPE type = FreeImage_GetColorType(dib);
//使dib格式为32位RGBA统一格式,销毁原来的dib
FIBITMAP * temp = dib;
dib = FreeImage_ConvertTo32Bits(dib);
FreeImage_Unload(temp);
//获取图片颜色的数据值
BYTE* pixels = (BYTE*)FreeImage_GetBits(dib);
//获取图片宽高
float width = FreeImage_GetWidth(dib);
float height = FreeImage_GetHeight(dib);
//把图片颜色数据从BGRA转换到RGBA
for (int i = 0; i < width*height * 4;i+=4){
BYTE temp = pixels[i];
pixels[i] = pixels[i + 2];
pixels[i + 2] = temp;
}
unsigned rec =Gluint_make(width, height, pixels);
FreeImage_Unload(dib);
return rec;
}
void onInitGL(){
tex = LodeFreeImage("Image/1.jpg");
tex2 = LodeFreeImage("Image/2.jpg");
tex3 = LodeFreeImage("Image/3.jpg");
}// CMFC_TextureView 绘制
void CMFC_TextureView::OnDraw(CDC* pDC)
{
CMFC_TextureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;


// TODO:  在此处为本机数据添加绘制代码
GL_Context1 context;
context.setup(m_hWnd, *pDC);
RECT rect;
::GetClientRect(m_hWnd, &rect);
double _width = rect.right - rect.left;
double _height = rect.bottom - rect.top; glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60, double(_width) / double(_height), 0.1, 1000); struct point_{
float x, y, z;
float u, v;
};
point_ rectangle[] = {
{ -1.0f, -1.0f, 1.0f, 0.3f, 0.3f },
{ 1.0f, -1.0f, 1.0f, 0.5f, 0.3f },
{ 1.0f, 1.0f, 1.0f, 0.5f, 0.8f },
{ -1.0f, 1.0f, 1.0f, 0.3f, 0.8f }, { -1.0f, -1.0f, -1.0f, 0, 0 },
{ -1.0f, 1.0f, -1.0f, 1, 0 },
{ 1.0f, 1.0f, -1.0f, 1, 1 },
{ 1.0f, -1.0f, -1.0f, 0, 1 }, { -1.0f, 1.0f, -1.0f, 0, 0 },
{ -1.0f, 1.0f, 1.0f, 1, 0 },
{ 1.0f, 1.0f, 1.0f, 1, 1 },
{ 1.0f, 1.0f, -1.0f, 0, 1 }, { -1.0f, -1.0f, -1.0f, 0, 0 },
{ 1.0f, -1.0f, -1.0f, 1, 0 },
{ 1.0f, -1.0f, 1.0f, 1, 1 },
{ -1.0f, -1.0f, 1.0f, 0, 1 }, { 1.0f, -1.0f, -1.0f, 0, 0 },
{ 1.0f, 1.0f, -1.0f, 1, 0 },
{ 1.0f, 1.0f, 1.0f, 1, 1 },
{ 1.0f, -1.0f, 1.0f, 0, 1 }, { -1.0f, -1.0f, -1.0f, 0, 0 },
{ -1.0f, -1.0f, 1.0f, 1, 0 },
{ -1.0f, 1.0f, 1.0f, 1, 1 },
{ -1.0f, 1.0f, -1.0f, 0, 1 },
};

onInitGL();
glMatrixMode(GL_MODELVIEW);
glDepthFunc(GL_LEQUAL);
// glEnable(GL_DEPTH_TEST);
glBindTexture(GL_TEXTURE_2D, tex);//绑定纹理
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);//启用纹理 glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(point_), &rectangle[0].x);
glTexCoordPointer(2,GL_FLOAT,sizeof(point_),&rectangle[0].u);
glLoadIdentity();
glTranslatef(3, 3, -10);
glDrawArrays(GL_QUADS, 0, 24); context.swapBuffer();}
// CMFC_TextureView 消息处理程序void CMFC_TextureView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO:  在此处添加消息处理程序代码
OnDraw(&dc);
// 不为绘图消息调用 CView::OnPaint()
}