2012-09-10 5 views
0
내가 NEHE 튜토리얼에서이 코드를 사용하고

의 좌표를 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); 
} 

답변

0

좋아 따를

내 OpenGL을 초기화 코드는 mfc의 다른 그림 제어 창 및 둘 다 다른 그림이있다. 그 이유는 마우스 내에서 아래로 또는 마우스 클릭 이벤트 때 내가 항상 위의 gl 코드를 사용하여 오류 1282 s = glGetError() 의해 사용하는 이유입니다.

은 그래서 난 그냥

wglMakeCurrent(hdc, hrc); 

//my code 

wglMakeCurrent(NULL, NULL); 

내에서 위의 코드를 추가 작동하게하고 그것은 일 모든 x 및 y 및 z 값이 화면 당신이를 넣어 어떤 코드 사이

+0

에 지금? – manatttta