很久以前我遇到过这个问题,最近我得到了一些线索,但还不是很清楚。
我基本上使用深度测试为现有图形渲染纹理。该功能在nvdia显卡下工作正常,但在intel显卡上没有(有时图片不稳定,有时候只是看板)。
首先我认为这可能是卡片问题。最近我发现如果我在choosepixelformat中更改了显示模式,它在intel卡上的效果也很好。
我也尝试了getpixelformat函数选择的模式,猜测可能是由于深度精度问题,我尝试了一些在opengl FAQ上推荐的技术,但没有成功。我尝试了几种RGBA显示模式,它们是(只使用双缓冲模式,它们是2,4,6,9,10,13,14):
Draw Pixel Color Depth Stencil Double Stereo Aux
Index To Type Bits R G B A Bits Bits Buffer Buffer Buffers
======================================================================
2 win rgba 32 8 8 8 8 . . yes . .
4 win rgba 32 8 8 8 8 16 . yes . .
6 win rgba 32 8 8 8 8 24 8 yes . .
9 win rgba 32 8 8 8 . 32 8 yes . .
10 win rgba 32 8 8 8 . 16 8 yes . .
13 win rgba 32 8 8 8 8 32 8 yes . .
14 win rgba 32 8 8 8 8 16 8 yes . .
正确显示的模式是2,9,10,13,14。失败的模式是4,6。窗口选择模式4。
任何人都可以给我一些提示吗?
感谢您的评论,在这里我添加了糟糕的渲染和放大同一台机器上的良好渲染图片。一个是模式4,一个是模式10:
对不起!系统不允许我在此处粘贴图像
粘贴在这里的坏文章只是其中之一,有些可能会显示其他奇怪的图片。
部分代码: OpenGL初始化
m_pDC = new CClientDC(this);
//m_pDC = new CPaintDC(this);
m_hDC=m_pDC->GetSafeHdc();
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
16, // 16-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
int m_PixelFormat;
//we may need to rewrite this function since it does not need the alpha bits
m_PixelFormat = ::ChoosePixelFormat(m_hDC, &pfd);
::SetPixelFormat(m_hDC, m_PixelFormat, &pfd);
//::SetPixelFormat(m_hDC, 10, &pfd);
//
m_hRC = ::wglCreateContext( m_hDC );
wglMakeCurrent( m_hDC, m_hRC );
wglMakeCurrent(NULL,NULL);
return TRUE;
渲染在WM_PAINT消息函数中: :: glEnable(GL_DEPTH_TEST); :: glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
::glViewport( 0, 0, rcClient.Width() , rcClient.Height() );
....
draw(...);
绘制功能将如下:
gluPerspective(90, width/height, 0.001, height/1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(cx,cy,cz,cx,cy,0,0,1,0);
然后在这里画出地图...... glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
然后绘制线条&这里的其他物品......
所有对象都是2D顶点格式,没有任何3D深度值。
答案 0 :(得分:0)
我忘了在这个问题上放回我的解决方案。事实证明,这是英特尔卡硬件加速的问题。我试图通过选择软件渲染来关闭硬件加速,问题就消失了。