나는 오래 전에이 문제를 겪었고 최근에는 그것에 대한 단서를 얻었지만 여전히 명확하지는 않다.다른 디스플레이 모드에서 완전히 다른 렌더링 결과가 있습니까?
기본적으로 깊이 테스트를 사용하여 기존 그림에 텍스처를 렌더링합니다. 이 기능은 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 깊이 값없는 선을 그립니다.
문제에 대한 설명이 매우 모호합니다. 렌더링 프로세스의 정확한 단계에 대한 코드와 설명을 제공하십시오. 또한 스크린 샷이 좋을 것입니다. – datenwolf