在不同的显示模式下完全不同的渲染结果?

时间:2011-01-24 23:37:19

标签: opengl

很久以前我遇到过这个问题,最近我得到了一些线索,但还不是很清楚。

我基本上使用深度测试为现有图形渲染纹理。该功能在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深度值。

1 个答案:

答案 0 :(得分:0)

我忘了在这个问题上放回我的解决方案。事实证明,这是英特尔卡硬件加速的问题。我试图通过选择软件渲染来关闭硬件加速,问题就消失了。