의 좌표를 2D에서 좌표 차원 얻을 는 OpenGL과 MFC 내 MFC 기반 응용 프로그램에서 마우스
그러나 문제는 내가 때마다 POSX을 잘못된 값을 얻고 있다는 점이다
void CRightOGL::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
GLint viewport[4];
GLdouble modelview[16]={0};
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
GLfloat mv[16];
glGetFloatv(GL_MODELVIEW_MATRIX, mv);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
winX = (float)point.x;
winY = (float)viewport[3] - (float)point.y;
glReadPixels(point.x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
COpenGLControl::OnLButtonDown(nFlags, point);
}
마우스 클릭, & posY, & posZ ... 값은 항상 -9.25555, -9.255555, -9.255555입니다. 이뿐만 아니라 modelview 행렬도 매번 같은 -9.555 값을 반환합니다.
0을 posX로 초기화하면 posY와 PosZ는 올바른 좌표 대신 0 만 반환합니다. 마우스 x와 y 값은 완벽하므로 마우스 쪽에서 아무런 문제가 없습니다.
내가 뭘 잘못하고있어? 내가이 있기 때문에, 나는 두 개의 서로 다른 HDC의 설정 사이의 그리기 기능을 사용하고 아래의 시나리오
로 인해 생성 문제를 파악
void COpenGLControl::oglInitialize(void)
{
// Initial Setup:
//
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32, // bit depth
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
16, // z-buffer depth
0, 0, 0, 0, 0, 0, 0,
};
// Get device context only once.
hdc = GetDC()->m_hDC;
// Pixel format.
m_nPixelFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc, m_nPixelFormat, &pfd);
// Create the OpenGL Rendering Context.
hrc = wglCreateContext(hdc);
wglMakeCurrent(hdc, hrc);
// Basic Setup:
//
// Set color to use when clearing the background.
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClearDepth(1.0f);
// Turn on backface culling
glFrontFace(GL_CCW);
glCullFace(GL_BACK);
// Turn on depth testing
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH);
//glEnable(GL_TEXTURE_2D); // Enable 2D textures
// Send draw request
GLenum a = glGetError();
OnDraw(NULL);
}
에 지금? – manatttta