2011-01-24 3 views
0

나는 오래 전에이 문제를 겪었고 최근에는 그것에 대한 단서를 얻었지만 여전히 명확하지는 않다.다른 디스플레이 모드에서 완전히 다른 렌더링 결과가 있습니까?

기본적으로 깊이 테스트를 사용하여 기존 그림에 텍스처를 렌더링합니다. 이 기능은 nvdia 그래픽 카드에서는 제대로 작동하지만 인텔 그래픽 카드에서는 작동하지 않습니다 (때로는 그림이 안정적이지 않고 때로는 정크스).

처음에는 이것이 카드 문제 일 수 있다고 생각합니다. 최근에 내가 choosepixelformat에서 디스플레이 모드를 변경하면 인텔 카드에서도 훌륭하게 작동합니다.

getpixelformat 함수로 선택한 모드도 시도해 보았습니다. 깊이 정밀도 문제로 인한 것일 수 있습니다. 몇 가지 기술을 opengl FAQ에서 추천했지만 성공하지는 못했습니다. 나는 몇 RGBA 디스플레이 모드를 시도, 그들은 (만 이중 버퍼와 모드를 사용하고 그들이 2,4,6,9,10, 13, 14이다)이다 : 정확하게 2입니다 디스플레이

 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 .  .  

모드 , 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

문제에 대한 설명이 매우 모호합니다. 렌더링 프로세스의 정확한 단계에 대한 코드와 설명을 제공하십시오. 또한 스크린 샷이 좋을 것입니다. – datenwolf

답변

0

이 질문에 대한 해결책을 다시 쓰는 것을 잊었습니다. 그것은 인텔 카드 하드웨어 가속의 문제라고 밝혀졌습니다. 소프트웨어 렌더링을 선택하여 하드웨어 가속을 해제하려고 시도했지만 문제가 사라졌습니다.

관련 문제