Opengl 不同显示模式下的渲染结果完全不同?
我很久以前就有这个问题,最近我得到了一些线索,但仍然不是很清楚 我基本上是使用深度测试来渲染现有图形的纹理。该功能在nvdia图形卡下运行良好,但在intel图形卡上运行不正常(有时图像不稳定,有时甚至出现问题) 首先,我认为这可能是卡的问题。最近我发现,如果我在choosepixelformat中更改了显示模式,它在intel卡上也能正常工作 我还尝试了getpixelformat函数选择的模式,并猜测这可能是由于深度精度问题,我尝试了opengl常见问题解答中推荐的一些技术,但没有成功。我尝试了几种RGBA显示模式,它们是(仅使用带有双缓冲区的模式,它们是2,4,6,9,10,13,14): 正确显示的模式有2、9、10、13、14。失败的是4,6。windows选择模式4 谁能给我一些提示 谢谢你的评论,在这里我添加了糟糕的渲染&好的渲染图片在同一台机器上。一个是模式4,一个是模式10: 对不起!系统不允许我在此处粘贴图像 贴在这里的坏的只是其中之一,有些可能会显示其他奇怪的图片 部分代码: OpenGL初始化Opengl 不同显示模式下的渲染结果完全不同?,opengl,Opengl,我很久以前就有这个问题,最近我得到了一些线索,但仍然不是很清楚 我基本上是使用深度测试来渲染现有图形的纹理。该功能在nvdia图形卡下运行良好,但在intel图形卡上运行不正常(有时图像不稳定,有时甚至出现问题) 首先,我认为这可能是卡的问题。最近我发现,如果我在choosepixelformat中更改了显示模式,它在intel卡上也能正常工作 我还尝试了getpixelformat函数选择的模式,并猜测这可能是由于深度精度问题,我尝试了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 message函数中:
::glEnable(GLU深度测试);
::glPolygonMode(GL\u前和后,GL\u填充)
绘图功能如下所示:
gluPerspective(90, width/height, 0.001, height/1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(cx,cy,cz,cx,cy,0,0,1,0);
然后在这里画地图。。。。。。
glDisable(GL_纹理_2D)
然后在这里画线和其他对象
所有对象都是2D顶点格式,没有任何3D深度值。我忘了把这个问题的答案放回去。事实证明,这是一个英特尔卡硬件加速的问题。我试图通过选择软件渲染来关闭硬件加速,但问题消失了。您对问题的描述非常模糊。请提供一些代码和渲染过程中确切步骤的说明。另外,截图也不错。
::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_DEPTH_TEST);